Bash:賦值`a=`定義了什麼?

Bash:賦值`a=`定義了什麼?

在 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 的測試。

您想要的是將這些參數傳遞給[命令:

  1. [
  2. $a您需要的內容"$a"
  3. =
  4. 空字串。為此,您需要''""...不傳遞任何內容意味著沒有傳遞任何參數,[因此第四個參數將是結束參數]
  5. ]

所以應該是:

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

輸出是一樣的。

相關內容