Gre*_*hal 8 shell bash string quoting test
我知道test -n <expression>
如果表达式的计算结果为大于 0 的字符串长度,则返回 false。为什么会发生以下情况?
Macbook:~ echo ${#undeclared_variable}
0
Macbook:~ test -n $undeclared_variable && echo Foo
Foo
Run Code Online (Sandbox Code Playgroud)
重击 4.x
我的期望是,既然test -n $undeclared_variable
应该评估 false,那么 Foo 不应该被回应。如果我使用[[ ]]
而不是测试,它会按预期工作。
jor*_*anm 15
你需要引用你的变量。没有引号,您正在编写test -n
而不是test -n <expression>
. 该test
命令不知道您提供了一个扩展为空的变量。
在POSIX壳等的语法bash
,$VARIABLE
双引号的外面是“分裂+水珠”操作符:所述变量的值被分成的空格分隔单词的列表,并且每个字被解释为一个通配符模式和由取代匹配文件的名称(如果没有匹配文件,则单独保留)。如果变量的值为空,则拆分后的词列表为空列表。要获取变量的值而不进一步处理,变量扩展需要在双引号内。
之所以[[
有效是因为它是 bash 特殊语法而不是命令;这个特殊的语法,内$VARIABLE
装置“的值VARIABLE
”(除了在模式匹配运营商的右手侧=
,==
,!=
和=~
)。Using 的[
功能与test
. 以下是你想要的:
test -n "$undeclared_variable" && echo "Foo"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
668 次 |
最近记录: |