2011-05-12 139 views
2

我将值0.000000写入文件中。我打开文件并将其分配给一个变量。 但是,当我比较它的值如if [ "$var" -eq "0.000000" ]它不计算为真。 可能是什么原因?Shell脚本变量值

此外,如果该文件只有0,并且如果我比较它的值[ "$var" -eq "0" ],那么它按照预期评估为真。

+0

您确保0.00000不被解释为数字,因此只等于零? – 2011-05-12 13:23:33

+7

bash不支持浮点。 -eq在整数上运行,而不是str比较。见http://mywiki.wooledge.org/BashPitfalls – 2011-05-12 13:24:23

+0

我只检查它也是0,但它也返回false。 – thetux4 2011-05-12 13:26:17

回答

2

正如弗雷德里克(+1对他)说的bash不支持浮点运算。如果你必须使用字符串比较:

if [ "$var" = "0.000000" ] 
1

你可能切换到的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 
+1

或者Perl ...或者Python ... – Johnsyweb 2011-05-12 13:58:24

+0

当然,Perl和Python使用完全不同的语法,而从bash切换到ksh(以及相互)却不那么具有破坏性。 – jlliagre 2011-05-12 15:58:41

1

bash无法理解浮点数。尝试使用bc,如果相等为真则返回1,否则返回0。

if [ $(bc <<< $var==0.000000) -eq 1 ] 
then 

fi 

expr

if [ $(expr $var == 0.000000) -eq 1 ] 
then 

fi