シェルスクリプトのfor 〜 in 文

しばらく書いていないとよく間違えてしまうのがfor 〜 in 文の記法です。

まず、正しい記述はこのようになります。

#!/bin/sh

array=("hoge" "foo" "var")

for tmp in @{array[*]}
do
  echo ${tmp}
done

実行結果

hoge
foo
var

しかし、以下のような書き方をしてしまうと、実行エラーにはなりませんが想定しない動作をしてしまいます。

for tmp in @array
do
  echo ${tmp}
done

実行結果

@array

他の言語ばかり書いているとついつい@arrayと書いてしまいがちですが、シェルスクリプトではNGです。

for tmp in $array[*]
do
  echo ${tmp}
done

実行結果

hoge[*]

明示的に{}でくくっておかないと「"配列の先頭の要素"+"[*]"」という文字列として認識されてしまいます。

配列全体として認識させたい場合は正しい記述例にあるように「${array[*]}」と記述する必要があります。