2011-05-12 138 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