1

尝试在 bash 中执行以下操作时

foo=foo
my_array[$foo]=bar

我收到错误“bash: foo: expression recursion level exceeded (error token is "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 回答