2017-07-31 63 views
0

我试图根据变量创建关联数组。所以下面是我想要做的超级简化版本(ls命令并不是我真正想要的,只是用于说明目的)...在Bash中为关联数组键使用变量

我有一个静态定义的数组(文本-a ,文字-b)。然后我想遍历该数组,然后创建带有这些名称和_AA的关联数组(所以关联数组称为text-a_AA和text-b_AA)。

我真的不需要附加的_AA,而是在想,因为$名称已经在循环使用 它可能有必要避免重名 。

我将需要那些已定义的脚本,并将在脚本的后续部分引用它们,而不仅仅是在下面看到的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 
+0

什么错误? – hedgar2017

+0

哪个版本的Bash允许包含'-'的变量名(而不是'_')?在线[Bash](http://www.gnu.org/software/bash/manual/bash.html)手册似乎没有列出选项,Bash 3.2和4.3似乎都不允许。 –

回答

0

您可能希望使用“NUM”作为关联数组和文件名的名称作为关键字。然后,你可以重写你的代码为:

NUM[${NAME}_AA]=$(wc -l < "$NAME") 

然后修改你的循环为:

for NAME in "${NAMES[@]}" 
do 
    echo "max: ${NUM[${NAME}_AA]}" 
done 

shellcheck.net


顺便检查您的脚本:全部大写是不是一个好练习命名正常的shell变量。你可能想看看:

+0

Ahhhhh辉煌!我可以翻转它!为什么我没有想到这个?哈哈,我会试试这个,谢谢! – biren