bash -e flag和'&&' list命令

时间:2017-01-20 09:24:05

标签: bash

如何解释这种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

1 个答案:

答案 0 :(得分:6)

仔细阅读man bash关于set -e的说法:

  

如果失败的命令是紧跟在while或者直到关键字之后的命令列表的一部分,那么shell不会退出,在if或elif保留字后面的测试的一部分,在{中执行的任何命令的一部分{1}}或&&列表,但最终||&& [...]

之后的命令除外

强调我的。

详细说明:运行||时,第一个false && false使整个命令因短路而失败,并且由于它不是构造中的最后一个命令,因此忽略其退出状态。在false的情况下,第一个false || false使第二个false运行也失败,但它的退出状态不会被忽略,因为它是构造中的最后一个命令。