Duncan wrote: >> `||:` also works - I use it sometimes in SBo scripts (all their templates >> have `set -e`). (Just out of curiosity, what is SBo?)
Martin wrote: >Or a leading "!", like: >! saved_shopts=$( shopt -p ) >Aside from a stylistic preference for a suffix rather than prefix, I wonder >why this isn't more commonly suggested? >PS: a prefix "!" does *not* cause errexit to be triggered when the command >has a zero exit status, and it's been that way for a long time: >$ set -e ; ! true ; ! false ; type ! ; echo $BASH_VERSION ; false ; echo >Still here >! is a shell keyword >2.01.0(1)-release Yes, this one has always struck me as odd. Not a bug, of course, pretty much because, as you say, it's always been this way. I'm not sure I really understand *why* it is not a bug (I've heard more than one explanation from knowledgeable sources, but am still somewhat unconvinced). Another example is "select". If you do something like: $ set -e $ select var in one two three; do echo "var = $var"; done $ And then hit ^D at the "#?" prompt, it will exit the "select" statement with status 1 but will *not* abort the shell. So, you need to append "|| exit" after the "done", to get that behavior. Again, I'm sure there is a reason for this, but I remain unconvinced. So, yes, "set -e" has quirks, but then again, shell is a quirky language - pretty much every construct in the shell language has quirks - things you need to test/figure out/become familiar with in order to use the language effectively. And note that if this *weren't* the case, there'd be no need for a certain web document (one called something like "mywiki BASH FAQ", maintained by one of this list's frequent posters).
