Shell-Script
bash - 如果字元串的長度為(非)零,則為真?
# touch $$ # gzip $$ # gzip --test $$.gz # echo $? 0 # OUT=$(gzip --test $$.gz) # echo $OUT # if [ -z $OUT ] ; then echo $$ ; fi 26521 # if [ -n $OUT ] ; then echo $$ ; fi 26521 #
從
bash(1)
-z string True if the length of string is zero. string -n string True if the length of string is non-zero.
我很困惑,它如何同時為零和非零?如何檢查鍵是否有值(使用
bash
)?
[ .. ]
遵循與所有其他命令相同的規則,即應用分詞。如果OUT
為空(或未設置),$OUT
將擴展為空,甚至不是空參數。因此,
[ -n $OUT ]
擴展為[
,-n
和]
, 並[
測試是否-n
不是空字元串。是的,所以測試返回 true。您需要引用
$OUT
,就像幾乎在其他任何地方一樣:if [ -n "$OUT" ]; then ...
命令
[ -z $OUT ]
完全等同於
test -z $OUT
其中,如果
$OUT
為空,則與test -z
的行為
test
取決於命令行中給出的參數數量。如果僅給定一個參數,如test -n
ortest -z
,如果該參數的長度在解釋為字元串時為非零,則結果將為“真”。這意味著 if
$OUT
為空且未加引號,則test -z $OUT
和test -n $OUT
都為真,因為-z
和-n
都是非零長度的字元串。為了解決這個問題,雙引號變數擴展:
[ -n "$OUT" ]
也可以看看