You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中通过for循环提取关联数组的指定键值?

问题解决:通过循环访问关联数组的指定键值

你尝试的${${i}[column_b]}属于Bash不支持的嵌套变量展开语法,因此触发bad substitution错误。以下是几种可行的解决方法:

方法1:使用nameref(Bash 4.3+ 推荐)

nameref是Bash 4.3及以上版本支持的特性,可创建变量引用,直接通过引用访问关联数组:

APP_LIST=('app1' 'app2')
declare -A app1=([column_a]="111" [column_b]="222")
declare -A app2=([column_a]="333" [column_b]="444")

for i in "${APP_LIST[@]}"; do
    declare -n current_app="$i"  # 创建关联数组的引用
    echo "${current_app[column_b]}"
    unset -n current_app  # 可选:取消引用
done

执行后会输出:

222
444

方法2:使用eval(兼容旧版本)

如果你的Bash版本低于4.3,可通过eval间接执行变量展开(注意:若$i包含不可控内容,存在安全风险):

APP_LIST=('app1' 'app2')
declare -A app1=([column_a]="111" [column_b]="222")
declare -A app2=([column_a]="333" [column_b]="444")

for i in "${APP_LIST[@]}"; do
    eval "echo \${$i[column_b]}"
done

方法3:间接引用结合数组展开

通过间接引用获取关联数组的定义,再赋值给临时数组访问:

APP_LIST=('app1' 'app2')
declare -A app1=([column_a]="111" [column_b]="222")
declare -A app2=([column_a]="333" [column_b]="444")

for i in "${APP_LIST[@]}"; do
    declare -A temp="${!i}"
    echo "${temp[column_b]}"
done

内容的提问来源于stack exchange,提问作者Jason

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:37:45