我将值0.000000写入文件中。我打开文件并将其分配给一个变量。 但是,当我比较它的值如if [ "$var" -eq "0.000000" ]
它不计算为真。 可能是什么原因?Shell脚本变量值
此外,如果该文件只有0,并且如果我比较它的值[ "$var" -eq "0" ]
,那么它按照预期评估为真。
我将值0.000000写入文件中。我打开文件并将其分配给一个变量。 但是,当我比较它的值如if [ "$var" -eq "0.000000" ]
它不计算为真。 可能是什么原因?Shell脚本变量值
此外,如果该文件只有0,并且如果我比较它的值[ "$var" -eq "0" ]
,那么它按照预期评估为真。
正如弗雷德里克(+1对他)说的bash不支持浮点运算。如果你必须使用字符串比较:
if [ "$var" = "0.000000" ]
你可能切换到的ksh支持浮点运算:
$ bash
a=0.00000
[ $a -eq 0 ] && echo ok || echo ko
bash: [: 0.00000: integer expression expected
ko
$ ksh
$ a=0.00000
$ [ $a -eq 0 ] && echo ok || echo ko
ok
$ a=0.00001
$ [ $a -eq 0 ] && echo ok || echo ko
ko
bash无法理解浮点数。尝试使用bc
,如果相等为真则返回1,否则返回0。
if [ $(bc <<< $var==0.000000) -eq 1 ]
then
fi
或expr
:
if [ $(expr $var == 0.000000) -eq 1 ]
then
fi
您确保0.00000不被解释为数字,因此只等于零? – 2011-05-12 13:23:33
bash不支持浮点。 -eq在整数上运行,而不是str比较。见http://mywiki.wooledge.org/BashPitfalls – 2011-05-12 13:24:23
我只检查它也是0,但它也返回false。 – thetux4 2011-05-12 13:26:17