假设我们有一个像这样的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
是动态声明的(第二行),我使用它的直接名称(第三行)为其赋值(在索引foo
下)。
我找不到通过动态名称(即在此情况下通过${arr}
变量)为关联数组分配值的语法。因为你可以动态声明数组,所以这种方式可行吗?类似于以下结构:
declare -A "${arr}"=(
[foo]='This is foo'
);
仅仅不工作。
declare "$arr[$key]=$val"
,其中$key
是一个MAC地址。我已经尝试了所有可能的引号技巧。 - aktivbdeclare
需要-g
标志才能分配给它,否则它将尝试创建同名的本地索引数组,并通过将其评估为算术表达式来“转换”键为数字值。由于任何有效变量名称的“键”都将计算为0,因此它不会报告任何错误,但MAC地址不是,因此bash将错误令牌报告为去掉前两个十六进制数字的地址,导致我认为引用是问题所在。 - aktivb