Bash Gotchas

This kind of shit is why sysadmins drink.

(( )) can return false

Iff the expression in (( blah )) evaluates to 0, the (( )) returns false, so your set -e script will fall on its arse. Best of luck to you.

pipes into read can return false for no reason

In some old versions of bash (e.g. RHEL6), piping commands into while read -r blah from the left will return false unchecked at the end of the stream, so set -e will make a mockery of you.

Use while read -r blah; do something; done < <(command>) instead.