Bash脚本预定义变量包含循环变量时输出为空如何解决
问题原因
你在for循环外执行test="i am $i"时,循环变量i还没有赋值,Shell会直接将空值替换到$i的位置,因此test变量存储的是固定字符串i am ,循环中只是重复输出这个固定值,不会跟随i的变化更新。
解决方案
方案1:将字符串拼接逻辑放到循环内(最简便)
直接在循环内部拼接字符串输出即可:
#!/bin/bash for i in {1..10} do echo "i am $i" done
方案2:使用格式化模板实现模板复用
如果需要提前定义通用字符串模板,可以配合printf的占位符实现:
#!/bin/bash # 提前定义模板,%s为数值占位符 template="i am %s" for i in {1..10} do # 循环中将当前i的值填入模板输出 printf "$template\n" "$i" done
额外注意
部分Linux发行版中sh默认指向dash,不支持{1..10}这种大括号展开语法,执行脚本时建议使用bash test.sh,或者给脚本添加执行权限后直接运行./test.sh,避免语法兼容问题。
内容的提问来源于stack exchange,提问作者user1819769
相关产品推荐
相关产品推荐

