如何解释这种bash行为?不要退出'&&'陈述?
# bash -xe
bash-4.1# trap 'echo ERROR' ERR
+ trap 'echo ERROR' ERR
bash-4.1# false && true
+ false
bash-4.1# false && false
+ false
bash-4.1# false || true
+ false
+ true
bash-4.1# false || false
+ false
+ false
++ echo ERROR
ERROR
答案 0 :(得分:6)
仔细阅读man bash
关于set -e
的说法:
如果失败的命令是紧跟在while或者直到关键字之后的命令列表的一部分,那么shell不会退出,在if或elif保留字后面的测试的一部分,在{中执行的任何命令的一部分{1}}或
之后的命令除外&&
列表,但最终||
或&&
[...]
强调我的。
详细说明:运行||
时,第一个false && false
使整个命令因短路而失败,并且由于它不是构造中的最后一个命令,因此忽略其退出状态。在false
的情况下,第一个false || false
使第二个false
运行也失败,但它的退出状态不会被忽略,因为它是构造中的最后一个命令。