在bash中尝试执行以下内容时
foo=foo
my_array[$foo]=bar
我得到错误'bash:foo:超出表达式递归级别(错误标记是“foo”)'。但这很好用:
foo=hello
my_array[$foo]=bar
为什么会这样?
答案 0 :(得分:3)
问题是你没有声明你的数组是关联的,所以假设它是一个数字数组。当bash试图评估时
my_array[$foo]=bar
他的意思是
my_array[foo]=bar
但是数组索引仍然不是数字,所以他试图再次评估它,导致
my_array[foo]=bar
因为您不需要在方括号之间使用$。您可以看到这种情况一直持续到递归级别超出异常为止。
要解决它,只需将数组声明为关联:
declare -A my_array