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

Bash中如何在for循环中遍历变量名并调用对应变量的存储值

Bash循环遍历变量名并读取对应值的实现方法

你需要使用Bash的间接变量展开语法实现需求,以下是两种可行的方案:


方案1:${!变量名} 语法(兼容性最佳)

这是Bash 2.0及以上版本都支持的标准写法,适用绝大多数环境:

a="hello"
b="world"
c="this is bash"

for f in a b c; do
  echo "${!f}"
done

执行后会依次输出三个变量的存储值:

hello
world
this is bash

方案2:nameref 名称引用(Bash 4.3+支持)

如果你的运行环境Bash版本大于等于4.3,可以使用名称引用的方式,更适合需要多次读写目标变量的场景:

a="hello"
b="world"
c="this is bash"

for f in a b c; do
  declare -n current_var="$f"
  echo "$current_var"
  # 如需修改原变量也可以直接操作current_var,比如 current_var="new value"
done

原写法错误原因

你之前尝试的写法无法生效的原因如下:

  • $( $f )属于命令替换语法,会把$f的内容作为系统命令执行,而非读取同名变量的值,你的变量a/b/c不是系统可执行命令,所以会报错
  • $ ( "$f" )中间加了空格属于语法错误,不符合Bash的变量/命令替换规则

注意事项

  • 遍历的变量名需要提前确定范围,避免执行不可控的外部输入的变量名,防止命令注入风险
  • 对兼容性有要求的场景优先选择${!变量名}的写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:00:00