Jim Meyering wrote: > Hi, > > Is the following behavior intended? > > I was surprised by the behavior of bash/zsh/ash/dash/pdksh, > yet Solaris 5.9's /bin/sh does what I expected: > > # Solaris 5.9's /bin/sh > $ echo a; (set -e; false; echo foo) && echo b > a > > # Yet bash/zsh/ash do this: > $ echo a; (set -e; false; echo foo) && echo b > a > foo > b > > The POSIX spec for set's -e option says the following, > so it all comes down to how you interpret being ``part of > an AND or OR list'': > > -e When this option is on, if a simple command fails for any of the > reasons listed in Section 2.8.1 (on page 46) or returns an exit status > value >0, and is not part of the compound list following a while, > until, or if keyword, and is not a part of an AND or OR list, and is > not a pipeline preceded by the ! reserved word, then the shell shall > immediately exit. > > My take was to consider the subshell commands in isolation, > where I expected the `set -e' to take effect. There, the simple > command `false' fails, so I expected that subshell to exit nonzero > and not print `foo'.
Bash, and every other modern shell, interprets the subshell as being part of the AND list, and disables the effect of `set -e'. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ( ``Discere est Dolere'' -- chet ) Live...Laugh...Love Chet Ramey, ITS, CWRU [EMAIL PROTECTED] http://cnswww.cns.cwru.edu/~chet/ _______________________________________________ Bug-bash mailing list Bug-bash@gnu.org http://lists.gnu.org/mailman/listinfo/bug-bash