假设我们有这样的Bash 4脚本:
1: arr='my_array';
2: declare -A "${arr}";
3: my_array[foo]='This is foo';
4: arrfoo="${arr}[foo]";
5: echo "${!arr}";
输出是:
This is foo
但是请注意,你已经动态声明了数组my_array
(第2行),我使用它的直接名称(第3行)指定了值(在索引foo
下)。
我找不到通过动态名称为关联数组赋值的语法(我的意思是在这种情况下通过${arr}
变量)。这是可能的,因为你可以动态声明数组吗?构造如:
declare -A "${arr}"=(
[foo]='This is foo'
);
只是不工作。
答案 0 :(得分:4)
您可以单独使用declare
:
$ arr=my_array
$ declare -A "$arr"
$ declare "$arr[foo]=bar"
$ echo "${my_array[foo]}"
bar
这提供了您需要的间接性。参数$arr[foo]=bar
已扩展为my_array[foo]=bar
,这是一个有效的赋值表达式,由declare
处理。