在Bash中为关联数组键使用变量

在Bash中为关联数组键使用变量,bash,associative-array,Bash,Associative Array,我正在尝试创建基于变量的关联数组。下面是我试图做的一个超级简化的版本(ls命令并不是我真正想要的,只是为了说明目的在这里使用) 我有一个静态定义的数组(text-a,text-b)。然后我想遍历该数组,并创建带有这些名称和附加的_AA的关联数组(因此称为text-a_AA和text-b_AA的关联数组) 我真的不需要附加_AA,但我想它可能是 必须避免重复名称,因为$NAME已被使用 在循环中 我将需要这些定义,并将在脚本的后面部分引用它们,而不仅仅是在下面我试图定义它们的for循环中。。。例如

我正在尝试创建基于变量的关联数组。下面是我试图做的一个超级简化的版本(ls命令并不是我真正想要的,只是为了说明目的在这里使用)

我有一个静态定义的数组(text-a,text-b)。然后我想遍历该数组,并创建带有这些名称和附加的_AA的关联数组(因此称为text-a_AA和text-b_AA的关联数组)

我真的不需要附加_AA,但我想它可能是 必须避免重复名称,因为$NAME已被使用 在循环中

我将需要这些定义,并将在脚本的后面部分引用它们,而不仅仅是在下面我试图定义它们的for循环中。。。例如,我希望以后能够引用text-a_AA[NUM](同样,为text-a_AA部分使用变量)。很明显,我下面的东西不起作用。。。据我所知,我需要使用namerefs?我已经试着把语法弄对了,但似乎弄不明白。。。任何帮助都将不胜感激

#!/usr/bin/env bash
NAMES=('text-a' 'text-b')
for NAME in "${NAMES[@]}"
do
    NAME_AA="${NAME}_AA"
    $NAME_AA[NUM]=$(cat $NAME | wc -l)
done

for NAME in "${NAMES[@]}"
do
    echo "max: ${$NAME_AA[NUM]}"
done
您可能希望使用“NUM”作为关联数组的名称,使用文件名作为键。然后,您可以将代码重写为:

NUM[${NAME}_AA]=$(wc -l < "$NAME")
请在查看您的脚本


顺便说一句:对于命名普通shell变量,全大写并不是一个好的做法。您可能想看看:


错误是什么?哪个版本的Bash允许变量名包含
-
(与
.
相反)?在线手册似乎没有列出一个选项,Bash3.2和4.3似乎都不允许这样做。啊,太棒了!我可以把它翻过来!我怎么没想到?!哈哈,我会试试这个,谢谢!
for NAME in "${NAMES[@]}"
do
    echo "max: ${NUM[${NAME}_AA]}"
done