Bash
Test -n 給出了意想不到的結果
我知道
test -n <expression>
如果表達式的計算結果為大於 0 的字元串長度,則返回 false。為什麼會發生以下情況?Macbook:~ echo ${#undeclared_variable} 0 Macbook:~ test -n $undeclared_variable && echo Foo Foo
重擊 4.x
我的期望是,既然
test -n $undeclared_variable
應該評估為假,那 Foo 不應該被呼應。如果我使用[[ ]]
而不是測試,它會按預期工作。
你需要引用你的變數。沒有引號,您正在編寫
test -n
而不是test -n <expression>
. 該test
命令不知道您提供了一個擴展為空的變數。
bash
在像$VARIABLE
_匹配文件的名稱(如果沒有匹配文件,則單獨保留)。如果變數的值為空,則拆分後的單詞列表為空列表。要在不進一步處理的情況下獲取變數的值,變數擴展需要在雙引號內。之所以
[[
有效,是因為它是一種 bash 特殊語法,而不是命令。在這種特殊語法中,$VARIABLE
表示“的值”(模式匹配運算符、和的VARIABLE
右側除外)。使用的功能與. 以下是您想要的:=``==``!=``=~``[``test
test -n "$undeclared_variable" && echo "Foo"