シェルスクリプトでハッシュみたいなこと・・はできない
追記=
トラックバックをいただいていたので改めてエントリを見てみたら、何となくとても違和感があったので、検証してみたらやっぱりおかしい事を書いていました。
ここで説明しているのはあくまで「evalでのシングルクォート展開」でしかなくて、全く「ハッシュみたいなもの」ではありません。
eval echo ${array[$hoge]} eval echo ${array[$foo]} eval echo ${array[$var]}
としてみるとわかるのですが
HOGEhogehoge HOGEhogehoge HOGEhogehoge
このように全て一つ目の要素になってしまい、ハッシュのようにキーから値をとってくることはできません。
for tmp in ${array[@]} do eval echo ${tmp} done
だと全ての要素をとってきていますが、これは配列を全て出しているに過ぎなくて、やってることは
eval echo ${array[0]} eval echo ${array[1]} eval echo ${array[2]}
と同じです。
誤ったエントリでしたので訂正いたします。
=
シェルスクリプトでハッシュみたいなことをする場面ってそんなにないと思うけど、一応知っておくと良いのかも。
#!/bin/sh array=('HOGE$hoge' '$foo' '$var') hoge="hogehoge" foo="foofoo" var="varvar" echo ${array[0]} echo ${array[$hoge]} eval echo ${array[0]} eval echo ${array[$hoge]} for tmp in ${array[@]} do eval echo ${tmp} done 実行結果 HOGE$hoge HOGE$hoge HOGEhogehoge HOGEhogehoge HOGEhogehoge foofoo varvar
evalはシングルクォートで囲んだ文字列内の変数を変数展開します(evalなしだと普通にそのままの文字列として扱う)。
実際やってることは配列にシングルクォート配列を格納しているに過ぎないので、当然、普通にインデクスを指定しても同様に変数展開された値にアクセスできますね。