これまで、シェルで配列を扱う機会はほとんどなかったのですが、最近のシェルでは連想配列が使えるようになったということで、配列を理解しておくことにしました。
連想配列については次回に書くとして、今回は普通の配列です。
下記のように半角スペース区切りの文字列をループさせてもいいのですが、配列や連想配列を明示的に宣言して使った方がわかりやすいですよね。
1 2 3 4 5 6 7 | #!/bin/sh list="a b c d e" for l in ${list}; do echo ${l} done |
配列を作成する
シェルで配列変数を明示的に宣言するには、「シェルで整数型の変数を使って計算処理をする方法」で紹介したのと同じく declare を使います。

配列の場合は -a オプションになります。
1 | declare -a list |
もちろん、明示的に宣言しなくても、配列の値を代入すれば問題ありません。
実際に変数に値を入れてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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]} |
結果は以下の通りです。
1 2 | a x |
配列の要素数を取得する
配列の要素数を取得したい場面も出てくると思いますが、その場合はループや何かの関数を使わなくても、以下の書き方で取得ができます。
1 2 3 | list_1=(a b c) echo ${#list_1[@]} |
結果は以下の通りです。
1 | 3 |
配列の要素の削除
配列の要素の削除は unset を使います。
1 2 3 4 5 | list_1=(a b c) unset list_1[2] echo ${#list_1[@]} echo ${list_1[2]} |
確認すると要素数は 3 のままですが、3 番目の値は未設定となっています。
1 | 3 |
配列のすべての要素を表示する
デバッグの時など、要素数以外にも配列の中身全部を表示させたい時があると思います。
その場合は、以下の書き方で取得ができます。
1 2 3 | list_1=(a b c) echo ${list_1[@]} |
確認すると、配列の値が表示されます。
1 | a b c |
配列は他にもいろいろな書き方ができますが、基本的な操作については他の言語と似たような感じで使えます。
ちなみに、冒頭で書いたループを配列に置き換えると以下のように書けます。
1 2 3 4 5 | list_1=(a b c) for l in ${list_1[@]}; do echo ${l} done |