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
相关产品推荐
相关产品推荐

