运算符“!”有什么区别 和“-z”应用于字符串?
#Example 1
if [ ! STRING ]; then ...
#Example 2
if [ -z STRING ]; then ...
Run Code Online (Sandbox Code Playgroud)
谢谢
首先,您使用单个括号。这意味着您使用的是test命令而不是 Bash 内置函数。从手册:
test EXPRESSION或[ EXPRESSION ]:这退出与返回的状态EXPRESSION
! EXPRESSION:test返回真正的EXPRESSION是假的
-z STRING: 如果 的长度为零,则test返回trueSTRING。
例子:
$ [ -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
Run Code Online (Sandbox Code Playgroud)
但现在你想知道[ ! STRING ]:
手册说明它[ STRING ]等效于[ -n STRING ],它测试是否STRING具有非零长度。因此[ ! STRING ]等价于[ -z STRING ]。
-n STRING: 的长度STRING非零。
STRING: 相当于-n STRING来源:
man test
答案:[ ! STRING ]相当于[ -z STRING ]