我想知道是否set -e通过子壳传播(即子壳继承-e其父级的设置),所以我做了一些实验.我发现了一些我无法解释的奇怪结果.
首先,这是一些基本测试.他们回归了我的期望.
( true; false ) # 1
( false; true ) # 0
( set -e; false; true ) # 1
Run Code Online (Sandbox Code Playgroud)
现在我尝试了如果我在子shell中放置一个子shell会发生什么.此表达式返回1,表示它传播.
( set -e; ( false; true ) )
Run Code Online (Sandbox Code Playgroud)
然后我尝试了这些表达式.我希望他们返回1,但我发现他们返回0.
( set -e; ( true; false ); true )
( set -e; ( set -e; false; true ); true )
Run Code Online (Sandbox Code Playgroud)
为什么?在这两种情况下,内部子shell返回1,无论是否set -e传播(我在开头检查).外部子shell具有set -e,这意味着它应该在内部子shell退出后失败,但事实并非如此.有人可以解释一下吗?