Bash脚本变量与bc命令结合的语法错误问题求助
解决浮点数比较的bc语法错误问题
你的脚本里出现的这个(standard_in) 1: syntax error错误,大概率是不同环境下bc对表达式的解析有点“小脾气”——虽然你变量b的赋值看起来完全没问题,但换个更稳妥的写法就能搞定。下面给你两种保留变量b的解决方案:
方案一:优化bc的调用方式
把原来的echo管道改成Here字符串的形式,同时明确判断bc的返回值,这样能避免很多潜在的解析问题:
b=8.25 if [ $(bc <<< "$b < 10") -eq 1 ]; then echo "hey" fi
这里用<<<直接把表达式传给bc,比管道更直接;而且bc对真的比较会返回1,判断等于1的逻辑也更清晰,不容易出错。
方案二:用awk处理浮点数比较(更推荐)
awk对浮点数的支持天生就比bc直观,语法也不容易踩坑,写法如下:
b=8.25 if awk -v num="$b" 'BEGIN {exit !(num < 10)}'; then echo "hey" fi
简单解释下:
-v num="$b"把shell里的变量b传递给awk的变量numBEGIN块会在awk处理输入前执行,exit !(num <10)的意思是:如果num <10成立,就返回0(shell里0代表执行成功,会走then分支);如果不成立,返回非0,跳过then块。
两种方法都能保留变量b的使用,而且都能正确完成浮点数小于10的判断,你可以根据自己的习惯选~
内容的提问来源于stack exchange,提问作者tbot
相关产品推荐
相关产品推荐

