I prefer to work with Linux that is very programming and command line friendly system. I consider other major systems (i.e. Windows and Mac) developer hostile thought Windows has been improving lately (sorry PowerShell!).
The default shell in my preferred Linux distro is Bash and I'm happy to use that with all bash-isms turned on and not considering the portability to other shells. It's not a practice praised e.g. in some useful sites but hey, it works for me at home and for my team at work!
Bash is fine as long as the script is simple: i.e. it essentially only records a few
straigtforward commands and can simply quit in case of an error (set -e), takes very few parameters and/or is only used by me. Good examples are convenience
wrappers to start Java programs or to set the command line parameters that are always constant in my workflow.
See e.g. my Saxon and yle-dl wrappers.
At work when the script is used by others too it is very necessary to have top-notch command line option handling and help. I have always found doing those in Bash cumbersome at best. On the other hand e.g. Python has very good command line parsing module.
So when I think the script will out-grow Bash I'll switch to xonsh. xonsh is a combination of Python and Unix shell and gives me the following benefits over plain Bash:
I don't use xonsh as interactive shell but only for scripts.