Bash脚本for循环内顺序更新浮点变量批量生成文件报错如何解决
问题解决方案
报错根因
你触发的语法错误来自第13行的算术运算写法错误:$(${F} + 1 | bc) 是错误的命令替换写法,$() 会将内部内容当作系统命令执行,而20.5 + 1本身不是可执行命令,才会抛出算术运算符无效的报错。
同时你的代码还有一个隐藏问题:Bash 中大括号展开的优先级高于变量替换,{${wm}..${wM}..${wS}} 无法按照你预期的1到70步进1展开,只会被识别为普通字符串,循环仅会执行1次。
修正方案
1. 修复浮点运算写法
要把算术表达式传递给bc计算,需要先通过echo将表达式输出到标准输入,再通过管道传给bc,正确写法为:
F=$(echo "${F} + 1" | bc)
2. 修复for循环写法
替换大括号展开为C风格for循环,适配变量控制循环范围的需求。
完整可运行代码
#!/bin/bash wm=1 wM=70 wS=1 F=20.5 # 改用C风格for循环实现变量控制范围 for (( W=${wm}; W<=${wM}; W+=${wS} )); do # 修复浮点运算语法 F=$(echo "${F} + 1" | bc) echo ${F} sed "s/WWW/${F}/g" distTmp.RST > "dist${W}.RST" done echo ${F}
可选优化
如果你的系统支持seq命令,也可以用seq生成循环序列:
for W in $(seq ${wm} ${wS} ${wM}); do # 内部逻辑和上面一致 done
内容的提问来源于stack exchange,提问作者Prathit
相关产品推荐
相关产品推荐

