linux - Bash 脚本 - 遍历关联数组列表的 "variable"变量名

标签 linux bash unix associative-array

我有一个关联数组的变量列表,我想遍历它并检索它们的键/值对。

我通过列出所有键并获取值来遍历单个关联数组,即。

for key in "${!queue1[@]}" do
    echo "key : $key"
    echo "value : ${queue1[$key]}"
done

棘手的部分是关联数组的名称是可变变量,例如给定 count = 5,关联数组将被命名为 queue1、queue2、queue3、queue4、queue5。

我正在尝试根据计数替换上面的序列,但到目前为止,括号和 eval 的每种组合都没有产生比糟糕的替换错误更多的错误。例如下面:

for count in {1,2,3,4,5} do
    for key in "${!queue${count}[@]}" do
        echo "key : $key"
        echo "value : ${queue${count}[$key]}"
    done
done

非常感谢您的帮助!

最佳答案

这里的困难源于这样一个事实,即间接扩展的语法 (${!nameref}) 与从关联数组中提取键的语法 (${!array[ @]}).我们只能有一个,不能两个都有。

由于我对使用 eval 很谨慎,所以我看不出有什么方法可以使用它来提取间接引用的关联数组的键:

keyref="queue${count}[@]"
for key in $(eval echo '${!'$keyref'}'); do ... ; done

然而,当从给定键的数组中提取值时,您可以避免使用 eval 并使用间接扩展。请注意,[key] 后缀必须是扩展的一部分:

valref="queue${count}[$key]"
echo ${!valref}

将其放在上下文中:

for count in {1..5} ; do
    keyref="queue${count}[@]"
    for key in $(eval echo '${!'$keyref'}'); do
        valref="queue${count}[$key]"
        echo "key = $key"
        echo "value = ${!valref}"
    done
done

关于linux - Bash 脚本 - 遍历关联数组列表的 "variable"变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13305717/

相关文章:

linux - 如何在Windows 10中扩展磁盘空间?

java - Eclipse 无法识别 Debian/Linux 上的 Apache Tomcat

bash - 是否可以使用命令行确定 YARN 中当前事件的调度程序插件?

java - Bash:查找所有子目录中的所有 jar 并显示它们的文件夹、名称和大小

linux - 如何计算csv文件标题中的列数?

unix - 信号处理程序的父子行为

bash - 如何确定目录是否是 shellscript 中已挂载的 NFS 挂载点

linux - 在 Zynq 的 PS block 的内存中,捕获的图像数据存储在 Zynq 处理器的哪个位置?这样我就可以使用 AXI 接口(interface)将它带到 PL block

c - GUI - Linux - C - 如何管理点击事件?

r - 在需要更新版本的 R 的 Ubuntu 10.04 上从源代码安装 RStudio