1
bashのバッシュ連想配列エラー
foo=foo
my_array[$foo]=bar
で次のコマンドを実行しようとすると、私はエラー「bashのを:FOO:超過表現の再帰レベル(エラー・トークンは 『foo』というある」)を得ます。しかしこれは正常に動作します:
foo=hello
my_array[$foo]=bar
どうしてですか?
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
おかげで、この問題を解決しました。しかし、なぜ私の質問の2番目の例はそれで動作しますか? –
私の推測では、bashが 'my_array [$ foo] = bar'を評価して' my_array [hello] = bar'に展開すると、それを再び評価しようとしますが、$ helloには一致しません。リテラルな文字列であるため、配列を結合的なものと見なして評価を停止します。 – Win32
@ Win32:$ {my_array [0]}に 'bar'を付けると、配列を連想型に変換しません。 – choroba