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