bash の配列を for ループで使う
bash で for ループを使って配列の要素を参照するやり方のメモです。
for-each
配列の全要素を列挙するには ${array[@]}
または ${array[*]}
を使います。
インデックスの情報が必要ないのであれば,これが一番シンプルなやり方ですね。
for v in "${array[@]}" do echo "$v" done
インデックスの情報が必要な場合は,変数を用意して自前でカウントしなくてはなりません。
i=0 for v in "${array[@]}" do echo "$i => $v" let i++ done
@ と * の違い
@
と *
の違いは,ダブルクォーテーションで括ったときに,前者が配列の各要素を個別に出力するのに対して,後者は全要素を 1 つに結合した結果を出力する点です。
配列を使って join 相当の処理をしたいといった特別な理由がない限り,添え字に @
を使ってダブルクォーテーションで括っておけば間違いがありません。
要素数を使って C 言語風に
配列の要素数は ${#array[@]}
または ${#array[*]}
で取得できます。
これを使って C 言語風の for ループを以下のように書けます。
for ((i = 0; i < ${#array[@]}; i++)) do echo "$i => ${array[$i]}" done
添え字のリストでよりスマートに
${!array[@]}
や ${!array[*]}
とすると,配列 array の添え字のリストに展開されます。
C 言語風の for ループよりもスマートに書けます。
インデックスの情報が必要なら,この書き方が一番よいのではないでしょうか。
for i in "${!array[@]}" do echo "$i => ${array[$i]}" done