年中アイス

いろいろつらつら

配列の全要素をループで取得する

シェル書いてて、配列全要素を利用したいときに、まんまループの書き方が良くわからなかったのでメモ。

ARRAY=(aaa bbb ccc)

for item in ${ARRAY[@]}; do
    echo $item
done

これで、配列ARRAYの要素を全部出力できます。
なぜかというと、echo ${ARRAY[@]} するとわかります。

echo ${ARRAY[@]}
#aaa bbb ccc

それがfor文で、下記のようになるので、要素が全部回せます。

for item in aaa bbb ccc; do
    echo $item
done

ちなみに、{}をつけないと、配列の先頭要素+[@]という文字列扱いになってしまいます。
配列は名前だけだと先頭要素を表し、先に展開されるようで、[@]がただの文字列と解釈されるようです。

ARRAY=(aaa bbb ccc)

echo $ARRAY[@] 
#aaa[@]

echo ${ARRAY[@]} 
#aaa bbb ccc

Javaでいうと拡張for文と似た書き方です。

String[] array = { "aaa", "bbb", "ccc" };

for (String str : array) {
     System.out.println(str);
}

他の言語を使うと、こういうちょっとしたところもぱっとわからなくて、やきもきします。