I was wondering whether set -e
propagates through subshells (i.e. does a subshell inherit the -e
setting of its parent), so I made some experiments. I found some strange results that I can't explain.
First, here are some basic tests. They return what I expect.
( true; false ) # 1
( false; true ) # 0
( set -e; false; true ) # 1
Now I tried what happens if I put a subshell within my subshell. This expression returns 1, which suggests that it propagates.
( set -e; ( false; true ) )
Then I tried these expressions. I expected them to return 1, but I found that they return 0.
( set -e; ( true; false ); true )
( set -e; ( set -e; false; true ); true )
Why? In both cases, the inner subshell returns 1, whether set -e
propagates or not (as I checked in the beginning). The outer subshell has set -e
, which means that it should fail after the inner subshell exits, but it does not. Can someone explain this?