bashで以下を実行しようとすると
foo=foo
my_array[$foo]=bar
「bash: foo: 式の再帰レベルを超えました (エラー トークンは "foo")」というエラーが表示されます。しかし、これはうまくいきます:
foo=hello
my_array[$foo]=bar
なぜこうなった?
問題は、配列が連想的であると宣言していないため、数値配列であると想定されていることです。bash が評価を試みるとき
my_array[$foo]=bar
彼が入ってくるのは
my_array[foo]=bar
しかし、配列インデックスはまだ数値ではないので、彼はそれを再度評価しようとします。
my_array[foo]=bar
角かっこの間に $ を使用する必要がないためです。これは、再帰レベル超過例外がスローされるまで続くことがわかります。
それを解決するには、配列を連想として宣言するだけです。
declare -A my_array