[英]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.