bash浮点比较和(标准_in)1:语法错误
我有一段代码,我从第三行得到bash浮点比较和(标准_in)1:语法错误,bash,shell,floating-point,comparison,bc,Bash,Shell,Floating Point,Comparison,Bc,我有一段代码,我从第三行得到(标准)1:语法错误: valueInFloat=printf "%.2g" $temp tempFloat=printf "%.1f" $value2 compare_result=`echo "$tempFloat < $valueInFloat" |bc -l` if [[ -z $compare_result ]] then ... valueInFloat=printf“%.2g”$temp tempFloat=printf“%.1f”$value2
(标准)1:语法错误
:
valueInFloat=printf "%.2g" $temp
tempFloat=printf "%.1f" $value2
compare_result=`echo "$tempFloat < $valueInFloat" |bc -l`
if [[ -z $compare_result ]]
then ...
valueInFloat=printf“%.2g”$temp
tempFloat=printf“%.1f”$value2
比较结果=`echo“$tempFloat<$valueInFloat”| bc-l`
如果[-z$比较结果]]
然后。。。
我正在尝试在bash
中进行浮点值比较
请注意,如果我注释掉第三行并放入
compare\u result=0
,错误就会消失。无论是$tempFloat
还是$valueInFloat
都没有值。在某些情况下,printf
可以生成bc
无法识别的浮点值。具体来说,类似于:
pax> printf "%.2g\n" 42456456457357357
4.2e+16
pax> echo '4.2e+16 > 1.0' | bc -l
(standard_in) 1: syntax error
我建议您坚持使用%f
变体。它将始终生成表单[−]999.999
符合ISO C标准,bc
将不会有任何问题(除非您开始进入无限或NaN)。%g
变量生成该格式或%e
格式[−]9.999e±99
取决于要求的值和精度
此外,您的测试是错误的。如果字符串为空,-z
测试将为真,根据比较结果,您的字符串将为1
或0
。更好的测试是(假设测试为阳性,您希望休息:
if [[ ${compare_result} -eq 1 ]]
这只是一段脚本,这些变量中的值将通过valueInFloat=
printf“%.2g”$temp
tempFloat=printf“%.1f”$value2
感谢您解决了这个问题…我使用了不同的格式说明符导致了这个问题。谢谢,这就是确切的解决方案。