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

Bash遍历数组时如何获取变量名而非变量值

解决Bash中输出变量名而非变量值的更优方案

嘿,我明白你的需求——你现在的数组只存了变量的值,丢失了和变量名的关联,想要不用额外存变量名数组的方式输出变量名,同时还能保留值用于后续操作。这里有几个更优雅的方案:

方案1:使用关联数组(最推荐)

Bash的关联数组可以直接把变量名作为键,变量值作为值,完美解决键值对应问题,既可以轻松遍历变量名,也能随时取用对应的值。

# 先定义你的变量
var1=$'1'
var2=$'2'
var3=$'3'

# 声明一个关联数组,把变量名和值绑定
declare -A var_assoc
var_assoc["var1"]=$var1
var_assoc["var2"]=$var2
var_assoc["var3"]=$var3

# 遍历关联数组的键(也就是变量名)
for var_name in "${!var_assoc[@]}"; do
    echo "$var_name"
    # 后续要用到值的话,直接用 ${var_assoc[$var_name]} 即可
done

执行这个脚本,输出就是你想要的:

var1
var2
var3

这个方案的优势是逻辑清晰、可控性强,完全不用担心变量名格式的问题,后续取值也非常方便。

方案2:利用变量间接引用+精简的变量名列表(适合不想用关联数组的场景)

如果你不想用关联数组,其实可以把变量名列表写得更紧凑,结合间接引用拿到值,虽然本质还是用到了变量名列表,但写法更简洁:

var1=$'1' var2=$'2' var3=$'3'

# 直接在循环里列出变量名,用间接引用取值
for var_name in var1 var2 var3; do
    echo "$var_name"
    # 取值的话用 ${!var_name}
    # echo "对应的值:${!var_name}"
done

这个写法比单独存一个变量名数组更简洁,而且同样能输出变量名,同时通过${!var_name}获取对应的值。

不推荐的方案:通过set命令过滤

还有一种方式是用set命令输出所有变量,再过滤出你需要的变量名,但这个方案不够严谨——如果有其他同名前缀的变量,会被误匹配,而且依赖set的输出格式,只适合临时快速测试:

var1=$'1' var2=$'2' var3=$'3'

# 过滤出以var开头的变量名(假设你的变量名都是var+数字格式)
set | grep -E '^var[0-9]+=' | cut -d'=' -f1

总结一下,关联数组是最优解,它完美保留了变量名和值的关联,操作起来也最灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:20:17