加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – Bash脚本 – 通过“变量”变量名来迭代关联数组列表

发布时间:2020-12-14 02:01:49 所属栏目:Linux 来源:网络整理
导读:我有一个关联数组的变量列表,我想迭代并检索它们的键/值对. 我通过列出其所有键并获取值来迭代单个关联数组,即. for key in "${!queue1[@]}" do echo "key : $key" echo "value : ${queue1[$key]}"done 棘手的部分是关联数组的名称是变量变量,例如给定count
我有一个关联数组的变量列表,我想迭代并检索它们的键/值对.

我通过列出其所有键并获取值来迭代单个关联数组,即.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读