bash浮点数比较与(standard_in)1:语法错误
bash float comparison and (standard_in) 1: syntax error
我有这段代码,我从第三行得到 (standard_in) 1: syntax error
:
valueInFloat=printf "%.2g" $temp
tempFloat=printf "%.1f" $value2
compare_result=`echo "$tempFloat < $valueInFloat" |bc -l`
if [[ -z $compare_result ]]
then ...
我正在尝试在 bash
中进行浮点值比较。
请注意,如果我注释掉第三行并输入 compare_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
变体。它将始终按照 ISO C 标准生成 [−]999.999
形式,bc
不会有任何问题(除非您开始进入无穷大或 NaN)。 %g
变体根据请求的值和精度生成该格式或 %e
格式 [−]9.999e±99
。
另外,你的测试是错误的。如果字符串为空,则 -z
测试将为真,并且您的字符串将是 1
或 0
,具体取决于比较结果。更好的测试是(假设如果测试呈阳性你想休息:
if [[ ${compare_result} -eq 1 ]]
我有这段代码,我从第三行得到 (standard_in) 1: syntax error
:
valueInFloat=printf "%.2g" $temp
tempFloat=printf "%.1f" $value2
compare_result=`echo "$tempFloat < $valueInFloat" |bc -l`
if [[ -z $compare_result ]]
then ...
我正在尝试在 bash
中进行浮点值比较。
请注意,如果我注释掉第三行并输入 compare_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
变体。它将始终按照 ISO C 标准生成 [−]999.999
形式,bc
不会有任何问题(除非您开始进入无穷大或 NaN)。 %g
变体根据请求的值和精度生成该格式或 %e
格式 [−]9.999e±99
。
另外,你的测试是错误的。如果字符串为空,则 -z
测试将为真,并且您的字符串将是 1
或 0
,具体取决于比较结果。更好的测试是(假设如果测试呈阳性你想休息:
if [[ ${compare_result} -eq 1 ]]