2017-05-15 16 views
0

我正試圖通過使用帶括號[]的括號來檢查test如何使用非零標誌測試-n

試驗的手冊頁說,-n可用於檢查字符串的長度不爲零:

-n STRING 
       the length of STRING is nonzero 

在相反-z可以使用TI檢查如果一個字符串的長度是零:

-z STRING 
       the length of STRING is zero 

爲了理解test是如何工作的我裝箱用空可變foo其具有零的長度和第二可變bar與一個的長度的例子:

$ export foo 
$ export bar=1 
$ [ -n $bar ] ; echo $? 
0 
$ [ -n $foo ] ; echo $? 
0 
$ [ -z $bar ] ; echo $? 
1 
$ [ -z $foo ] ; echo $? 
0 

-n的前兩項測試顯示結果爲零。我建議第一次測試將爲零,第二次測試將爲零。第二個測試顯示了建議的結果。

+3

引用您的變量或使用'[[]]''。 '-n $ foo'擴展爲'-n',因爲它沒有參數,所以被'[]'看作是用'-n'測試的字符串,所以變成'[-n「-n」]' – 123

回答

1

嘗試以下操作:

[ -n "$foo" ] ; echo $? 

由於$ foo是一個空字符串,

[ -n $foo ] # without quotes 

變爲:

[ -n ] 

手動測試(1)表示:

STRING equivalent to -n STRING 

所以[-n]被視爲不像[-n「」],但像[「-n」]