Bash - 使用数组循环嵌套 for 循环

Bash - 使用数组循环嵌套 for 循环

我有 1 个数组和 2 个关联数组。我想使用主数组列表循环遍历两个关联数组,因为我希望代码是可维护的。但我似乎无法做对。

当我尝试打印关联数组中的键值时,结果始终为 0。

下面是我的示例代码

declare -A list_a list_b
list_a=( [a]=1 [b]=2)
list_b=( [c]=3 [d]=4)
master_list=(list_a list_b)

for thelist in "${master_list[@]}"
do
   for key in "${!thelist[@]}"
   do
     #it show be printing out the keys of the associative array
     echo "the key is: $key"
   done
done

Output:
the key is: 0
the key is: 0

知道问题出在哪里吗?

答案1

要扩展数组间接寻址,字符串[@]必须是变量的一部分。它适用于以下值:

for thelist in "${master_list[@]}" ; do
    reallist=$thelist[@]
    for key in "${!reallist}" ; do
        echo "the key is: $key"
    done
done

对于钥匙,我看不到没有eval.

for thelist in "${master_list[@]}" ; do
    eval keys=('"${!'$thelist'[@]}"')
    for key in "${keys[@]}" ; do
        echo "the key is: $key"
    done
done

只要您确定 master_list 仅包含变量名称,它应该是安全的。

答案2

玩起来很有趣,但是 bash 似乎有一些问题无法满足你的想象;)

list_a=( 1 2 )
list_b=( 3 4 )

for key in "${list_a[@]}" "${list_b[@]}"; do
  echo "the key is: $key"
done

输出 :

the key is: 1
the key is: 2
the key is: 3
the key is: 4

相关内容