Bash

Test -n 給出了意想不到的結果

  • February 18, 2020

我知道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"

引用自:https://unix.stackexchange.com/questions/141024