Bash 操作员:“!”与“-z”
Bash operators: "!" vs "-z"
运算符“!”有什么区别?并将“-z”应用于字符串?
#Example 1
if [ ! STRING ]; then ...
#Example 2
if [ -z STRING ]; then ...
谢谢
首先你使用单括号。这意味着您正在使用 test
命令而不是 Bash-内置函数。来自手册:
test EXPRESSION
or [ EXPRESSION ]
: this exits with the status returned by EXPRESSION
! EXPRESSION
: test
returns true of EXPRESSION
is false
-z STRING
: test
returns true if the length of STRING
is zero.
示例:
$ [ -z "foo" ] && echo "zero length" || echo "non-zero length"
non-zero length
$ [ ! -z "foo" ] && echo "non-zero length" || echo "zero length"
non-zero length
$ [ -z "" ] && echo "zero length" || echo "non-zero length"
zero length
$ [ ! -z "" ] && echo "non-zero length" || echo "zero length"
zero length
但现在您想知道 [ ! STRING ]
:
手册指出 [ STRING ]
等同于 [ -n STRING ]
,它测试 STRING
是否具有非零长度。因此 [ ! STRING ]
等同于 [ -z STRING ]
.
-n STRING
: the length of STRING
is nonzero.
STRING
: equivalent to -n STRING
source: man test
回答:[ ! STRING ]
等同于[ -z STRING ]
简答:它们是一样的。
[ ! STRING ]
是
的否定
[ STRING ] # which is implicitly [ -n STRING ]
所以如果 STRING
的长度 不是非 零,那么 [ ! STRING ]
为真。
[ -z STRING ]
如果 STRING
的长度为零, 也成立。
运算符“!”有什么区别?并将“-z”应用于字符串?
#Example 1
if [ ! STRING ]; then ...
#Example 2
if [ -z STRING ]; then ...
谢谢
首先你使用单括号。这意味着您正在使用 test
命令而不是 Bash-内置函数。来自手册:
test EXPRESSION
or[ EXPRESSION ]
: this exits with the status returned byEXPRESSION
! EXPRESSION
:test
returns true ofEXPRESSION
is false
-z STRING
:test
returns true if the length ofSTRING
is zero.
示例:
$ [ -z "foo" ] && echo "zero length" || echo "non-zero length"
non-zero length
$ [ ! -z "foo" ] && echo "non-zero length" || echo "zero length"
non-zero length
$ [ -z "" ] && echo "zero length" || echo "non-zero length"
zero length
$ [ ! -z "" ] && echo "non-zero length" || echo "zero length"
zero length
但现在您想知道 [ ! STRING ]
:
手册指出 [ STRING ]
等同于 [ -n STRING ]
,它测试 STRING
是否具有非零长度。因此 [ ! STRING ]
等同于 [ -z STRING ]
.
-n STRING
: the length ofSTRING
is nonzero.
STRING
: equivalent to-n STRING
source:
man test
回答:[ ! STRING ]
等同于[ -z STRING ]
简答:它们是一样的。
[ ! STRING ]
是
的否定[ STRING ] # which is implicitly [ -n STRING ]
所以如果 STRING
的长度 不是非 零,那么 [ ! STRING ]
为真。
[ -z STRING ]
如果 STRING
的长度为零,也成立。