运行[ -z "" ] && echo 0 || echo 1
给出输出0
。这个命令是什么?它是如何解释的?
答案1
在 bash(和类似的 shell)中,[ x ] && y || z
是一种惯用的简写方式if [ x ] ; then y ; else z ; fi
,wheny
是一个简单的语句,不会/不能计算为false
。当您不想浪费 5 行宝贵的屏幕/编辑器垂直空间来进行简单测试时,它非常有用。
我所说的“惯用”是指这是一种常见的 shell 编程实践。一种利用逻辑 AND ( &&
) 和 OR ( ||
) 在 shell 中工作的方式的方法。 如果为 true y
则执行。如果为 false 则执行...问题是x
z
x
z
还x
如果为 true 则执行并y
运行,但计算结果为 false(即返回非零退出代码) - 这就是为什么它应该不是如果有可能发生这种情况,请使用。例如[ -z "" ] && false || echo 1
,即使条件-z ""
为真,也会输出“1”。
换句话说,它(几乎)相当于:
if [ -z "" ] ; then
echo 0
else
echo 1
fi
这种完整形式的if; then ... ; else ... ; fi
结构不存在与简写形式相同的缺陷。这种构造是正确的并且始终有效,而速记是一种快速而肮脏的技巧,在某些有限的情况下很有用。
-z
测试字符串是否为空。
该命令的英文是:
如果空字符串为空则显示“0”,否则显示“1”。
它将始终显示“0”。