OTOH, I believe the error handling tricks discussed should work with any POSIX shell so I've updated the shebang line in the code snippets to use the more generic #!/bin/sh.
Something that can help pin down usage of bash extensions is checkbashisms (in the devscripts package on Debian systems). Also running the script through a shell that claims POSIX compliance like /bin/dash.
% ln -s /bin/bash sh
% ./sh
sh-3.2$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
sh-3.2$ exit
% dash
$ echo {1..10}
{1..10}
where dash is supposed to be POSIX compliant.Having ksh93 available on all systems was pretty nice, and there definitely was a place for some of the features without going for something else (which in this case mostly was Perl).
If you're arguing that classic shell scripting doesn't carry you all that far, I would agree, but I don't see the harm in using #!/bin/bash or #!/bin/ksh in lieu of sh the few times you are writing a shell script; they are both extremely common and feature many conveniences.
More or less sane systems have something like this (Ubuntu 9.10):