我找不到任何表明这是正确行为的文档。我已经在bash 4.2.25和4.1.2上验证了这种行为。这些是我可以轻松访问的最新版本。 非常感谢,如果有人解释为什么条件会改变前面的子shell的行为。
# ( set -e; false ; echo bye )
# ( set -e; false ; echo bye ) || echo "failed"
bye
#
感谢, 布赖恩
答案 0 :(得分:2)
我相信-e
4.2手册页中bash
选项描述的重点部分适用:
如果,shell不会退出 失败的命令是[...] part 执行的任何命令 a&&或||列表[...]
false
命令是构成||
运算符的LHS的子shell的一部分,因此尽管它失败,但忽略-e
。可以说,这是一个错误,因为false
不是||
实际设置set -e
的{{1}}的一部分。
答案 1 :(得分:2)
请参阅以下link
执行化合物时应忽略-e设置 列出while,until,if或elif保留字, 一条管道开头!保留字或任何 除最后一个之外的AND-OR列表的命令。