运算符“!”之间有什么区别?和“ -z”应用于字符串?
#Example 1
if [ ! STRING ]; then ...
#Example 2
if [ -z STRING ]; then ...
谢谢
答案 0 :(得分:2)
首先,您使用单个方括号。这意味着您正在使用test
命令,而不是Bash内置函数。从手册中:
test EXPRESSION
或[ EXPRESSION ]
:这将以EXPRESSION
返回的状态退出
! EXPRESSION
:test
返回EXPRESSION
中的 true 为 false
-z STRING
:如果test
的长度为零,则STRING
返回 true 。
示例:
$ [ -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
:STRING
的长度不为零。
STRING
:等同于-n STRING
来源:
man test
答案: [ ! STRING ]
等同于[ -z STRING ]
答案 1 :(得分:0)
简短的回答:它们是相同的。
[ ! STRING ]
是对
的否定[ STRING ] # which is implicitly [ -n STRING ]
因此,如果[ ! STRING ]
的长度不是非零,则STRING
为真。
[ -z STRING ]
如果STRING
的长度为零,则也是如此。