1

bashで以下を実行しようとすると

foo=foo
my_array[$foo]=bar

「bash: foo: 式の再帰レベルを超えました (エラー トークンは "foo")」というエラーが表示されます。しかし、これはうまくいきます:

foo=hello
my_array[$foo]=bar

なぜこうなった?

4

1 に答える 1

3

問題は、配列が連想的であると宣言していないため、数値配列であると想定されていることです。bash が評価を試みるとき

my_array[$foo]=bar

彼が入ってくるのは

my_array[foo]=bar

しかし、配列インデックスはまだ数値ではないので、彼はそれを再度評価しようとします。

my_array[foo]=bar

角かっこの間に $ を使用する必要がないためです。これは、再帰レベル超過例外がスローされるまで続くことがわかります。

それを解決するには、配列を連想として宣言するだけです。

declare -A my_array
于 2012-04-21T12:12:36.007 に答える