在 bash 中,如果我進行分配
a=
現在是什麼情況a
?我確信 a 不是''
字串,也不是0
。
我發現只有下面的測試是正確的
if [ $a = ];then echo 'good';fi
答案1
它是空字串。
這與執行以下操作相同:
a=''
或者
a=""
或者
a=$''
或者對這一點來說:
a=''""$''
這些''
、""
、 和$'...'
是對 shell 的參考運算子。當你這樣做時:
a=''
您沒有將由兩個單引號字元組成的字串指派給$a
空字串。這些''
是多餘的,因為它們裡面沒有任何內容,但這可以使您的程式碼稍微更清晰(更清楚地表明您確實打算分配一個空字串)。
要將文字指派''
給$a
,您需要引用這些特殊字符,例如:
a="''" a=\'\' a=$'\'\'' a="'"\'
您的測試命令無效。在
[ $a = ]
由於您忘記引用$a
,因此 split+glob 運算子應用於$a
。由於$a
為空(但如果它僅包含預設值為 的空格或換行符,則結果是相同的$IFS
),導致沒有參數傳遞給[
命令。
所以收到的所有參數[
都是[
,=
和]
。對於[
,這是一個判斷是否=
為非空字串並傳回 true 的測試。
您想要的是將這些參數傳遞給[
命令:
[
$a
您需要的內容"$a"
=
- 空字串。為此,您需要
''
或""
...不傳遞任何內容意味著沒有傳遞任何參數,[
因此第四個參數將是結束參數]
。 ]
所以應該是:
if [ "$a" = '' ]; then echo '$a is empty'; fi
或者:
if [ -z "$a" ]; then echo '$a is empty'; fi
答案2
變數 a 等於空字串。
a=
if [ "$a" -eq "" ]; then echo 'good'; fi
輸出是:
$ . tst.sh
good
對於這段程式碼:
a=
if [ -z "$a" ]; then echo 'good'; fi
輸出是一樣的。