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 测试将为真,并且您的字符串将是 10,具体取决于比较结果。更好的测试是(假设如果测试呈阳性你想休息:

if [[ ${compare_result} -eq 1 ]]