クマの手も借りたい
馬とテニスとリラックマが好きな IT 系のエンジニアです。
シェル

シェルで配列の変数を使ってループ処理する方法

これまで、シェルで配列を扱う機会はほとんどなかったのですが、最近のシェルでは連想配列が使えるようになったということで、配列を理解しておくことにしました。

連想配列については次回に書くとして、今回は普通の配列です。

下記のように半角スペース区切りの文字列をループさせてもいいのですが、配列や連想配列を明示的に宣言して使った方がわかりやすいですよね。

#!/bin/sh

list="a b c d e"

for l in ${list}; do
    echo ${l}
done

配列を作成する

シェルで配列変数を明示的に宣言するには、「シェルで整数型の変数を使って計算処理をする方法」で紹介したのと同じく declare を使います。

あわせて読みたい
シェルで整数型の変数を使って計算処理をする方法シェルでは明示的に整数型の変数が宣言できます。 これまでループのカウントや計算などは expr コマンドを利用していたのですが、明...

配列の場合は -a オプションになります。

declare -a list

もちろん、明示的に宣言しなくても、配列の値を代入すれば問題ありません。

実際に変数に値を入れてみます。

declare -a list_1

# 空の配列を作成
list_1=()

# 明示的に配列の宣言をせずに空の配列を作成
list_2=()

list_1=(a b c)
list_2=(x y z)

# それぞれの配列の先頭を表示
echo ${list_1[0]}
echo ${list_2[0]}

結果は以下の通りです。

a
x

配列の要素数を取得する

配列の要素数を取得したい場面も出てくると思いますが、その場合はループや何かの関数を使わなくても、以下の書き方で取得ができます。

list_1=(a b c)

echo ${#list_1[@]}

結果は以下の通りです。

3

配列の要素の削除

配列の要素の削除は unset を使います。

list_1=(a b c)

unset list_1

echo ${#list_1[@]}
echo ${list_1}

確認すると要素数は 3 のままですが、3 番目の値は未設定となっています。

3

配列のすべての要素を表示する

デバッグの時など、要素数以外にも配列の中身全部を表示させたい時があると思います。

その場合は、以下の書き方で取得ができます。

list_1=(a b c)

echo ${list_1[@]}

確認すると、配列の値が表示されます。

a b c

配列は他にもいろいろな書き方ができますが、基本的な操作については他の言語と似たような感じで使えます。

ちなみに、冒頭で書いたループを配列に置き換えると以下のように書けます。

list_1=(a b c)

for l in ${list_1[@]}; do
    echo ${l}
done
Web API The Good Parts

オライリーの「Web API」に特化した本です。最近の多くの Web サービスは API が活用されていますが、その技術はこれまでの Web サイトとそれほど大きく変わりません。

今後、マイクロサービス化が進む中で知っておいて損はない内容が詰め込まれており、現場のエンジニアやこれから Web 系のエンジニアを目指す人にもオススメの一冊です。

created by Rinker
¥2,376
(2018/09/21 11:58:20時点 Amazon調べ-詳細)

あなたにオススメ