BASH for循环中变量赋值与输出异常问题求助
问题分析与解决
错误原因
- 变量引用逻辑错误:你写的
echo "$var$c"里,$var是未定义的变量,bash会将其解析为空字符串,再拼接当前的$c值(循环中c持续自增),所以最终输出1、2、3这类数字。 - 赋值与引用不同步:赋值
var$c后立刻让c自增,导致后续要引用的var$c其实是下一个还未赋值的变量,就算$var能正确解析,也拿不到刚赋值的内容。
修复方案
方案1:修复原脚本的变量引用(不推荐动态变量名写法)
如果一定要保留动态命名的变量,可以用bash的间接引用语法${!变量名},同时调整c自增的顺序:
tea=(A B C D E F G) c=0 for (( i=1; i<${#tea[@]}; i++ )); do # 用declare替代eval更安全,避免注入风险 declare "var$c=${tea[$i]}" # 间接引用var$c对应的变量 echo "${!var$c}" >> example.txt c=$((c+1)) done
方案2:直接遍历数组(推荐,简洁且安全)
完全没必要用动态变量名,直接从数组的第2个元素(索引1)开始遍历即可:
tea=(A B C D E F G) # 从索引1开始截取数组所有元素并遍历 for item in "${tea[@]:1}"; do echo "$item" >> example.txt done
运行后example.txt里就会得到预期的B C D E F G。
内容的提问来源于stack exchange,提问作者sasa.asa
相关产品推荐
相关产品推荐

