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

时间:2017-07-31 20:59:09

标签: bash associative-array

我正在尝试基于变量创建关联数组。以下是我正在尝试做的超简化版本(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

1 个答案:

答案 0 :(得分:0)

您可能想要使用" NUM"作为关键数组的名称和文件名作为键。然后,您可以将代码重写为:

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

然后将你的循环改为:

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

shellcheck.net

检查您的脚本

顺便说一下:所有大写都不是命名普通shell变量的好方法。您可能需要查看:

相关问题