以下 if/then 测试(在 bash 中):
if [ 1 ]; then ls /undef_dummy > /dev/null 2>&1; else echo "else stmt"; fi
似乎不等同于它的三元版本:
(test 1) && ls /undef_dummy > /dev/null 2>&1 || echo "else stmt"
第一个不会打印,但第二个会打印“else stmt”。
这是因为 || 三元版本中的运算符与测试的返回状态或测试通过时执行的命令相关。但通常,我们希望 else 语句只与测试相关,所以在这里使用三元版本是不安全的。
我对吗?