簡體   English   中英

為什么未設置的變量在bash if語句中被評估為0

[英]Why an unset variable gets evaluated as 0 in bash if statement

我試圖理解為什么未設置的變量會被評估為0。在某些腳本中,僅在需要時設置寫入變量的時間,有時則不會。 因此這種行為會導致輸出錯誤。 這是否意味着我必須預先設置所有變量,或者至少添加對它們的設置的檢查?

#!/bin/bash
#myvalue=0  #comment to simulate an unset variable.

if [[ $myvalue -eq 0 ]] ; then
   echo "OK"
fi

OK的結果:

bash -x test.sh
+ [[ '' -eq 0 ]]
+ echo OK
OK

[[ ... ]]內部的-eq運算符僅適用於整數值,因此會觸發對其操作數的算術運算。 在一個算術表達式中,未設置的變量默認為0。一個更明顯的算術評估示例:

$ if [[ 3 -eq "1 + 2" ]]; then echo equal; fi
equal

請注意,在您的示例中,您甚至不需要首先擴展參數。 算術評估將為您做到:

$ if [[ myvalue -eq 0 ]]; then echo equal; fi
equal
$ myvalue=3
$ if [[ myvalue -eq 3 ]]; then echo equal; fi
equal

另外,這特定於bash [[ ... ]]命令。 對於POSIX [-eq不觸發算術評估。

$ if [ "$myvalue" -eq 0 ]; then echo equal; fi
bash: [: : integer expression expected
$ if [ myvalue -eq 0 ]; then echo equal; fi
bash: [: myvalue: integer expression expected

如果要將文字值用作比較,請使用=而不是-eq

if [[ $myvalue = 0 ]] ; then
    echo "OK"
fi

如果arg1等於0 ,則算術二進制運算符( -eq )返回true,無論是否設置為0或根本不設置$myvalue ,... ''為null,等於零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM