如何在Bash中为动态关联数组赋值?

时间:2018-02-06 18:59:29

标签: arrays bash

假设我们有这样的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'
);

只是不工作。

1 个答案:

答案 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处理。