我想知道set -e
是否通过子 shell 传播(即子 shell 是否继承了其父对象的-e
设置),所以我做了一些实验。我发现了一些无法解释的奇怪结果。
首先,这是一些基本测试。他们返回了我的期望。
( true; false ) # 1
( false; true ) # 0
( set -e; false; true ) # 1
现在,我尝试了如果将子shell放入子shell中会发生什么情况。该表达式返回1,表明它正在传播。
( set -e; ( false; true ) )
然后,我尝试了这些表达式。我希望它们返回1,但是我发现它们返回0。
( set -e; ( true; false ); true )
( set -e; ( set -e; false; true ); true )
为什么?在这两种情况下,无论
set -e
是否传播(如我在开头所检查的那样),内部子Shell均返回1。外部子 shell 具有set -e
,这意味着它在内部子 shell 退出后应该会失败,但不会失败。有人可以解释吗? 最佳答案
在bash
4之前,set -e
似乎仅在简单命令具有非零退出(强调我的退出)的情况下导致 shell 退出:
在bash
4(可能是4.1,我没有要检查的4.0)中,-e
的作用扩展到了更复杂的命令:
关于bash - “set -e”如何与子 shell 一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22630363/