我知道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 不应该被回应。如果我使用[[ ]]
而不是测试,它会按预期工作。
# 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
#
Run Code Online (Sandbox Code Playgroud)
从 bash(1)
Run Code Online (Sandbox Code Playgroud)-z string True if the length of string is zero. string -n string True if the length of string is non-zero.
我很困惑,它如何同时为零和非零?如何检查键是否具有值(使用bash
)?