重击操作符:“!” vs“ -z”

时间:2018-07-20 10:25:03

标签: bash operators

运算符“!”之间有什么区别?和“ -z”应用于字符串?

#Example 1
if [ ! STRING ]; then ...

#Example 2
if [ -z STRING ]; then ...

谢谢

2 个答案:

答案 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的长度为零,则

也是如此。