Debian and Ubuntu switched to dash (iirc) because of a couple of things. First of all, Bash has become big over the years. In fact, the
/bin/bash binary on my Ubuntu 8.04 system is almost ten times (!) as big as
/bin/dash. Now, that does not matter much for day to day shell use, but it does matter in the following situations:
- Dash is much smaller and thus loads faster, which is a boon for init-scripts. If you have to start a lot of them, loading Dash instead of Bash each time, speeds things up considerably.
- Because of the smaller size of Dash, Debian and Ubuntu are able to shave off a pretty big chunk of the size of their initrd, leaving more room for other stuff (and again, speeding things up).
The downside of using Dash instead of Bash for scripting, is that a lot of people use syntactical niceties only Bash has, the so-called Bashisms. Examples of Bashisms are substrings, like this:
Dash, on the other hand mainly aims to be POSIX compliant (and no more than that), will give you a Bad substition error if you try this:
# actually, it will read /bin/bash above, because if you just run dash
# it will not set the $SHELL variable :)
dash: Bad substitution
This will matter if you use
/bin/sh (and therefore
dash) as the interpreter for your shellscripts and use Bashisms in them. Debian and Ubuntu have nice wiki pages about Bashisms and why they are bad in shellscripts in general and init-scripts in particular. Therefore, you should consciously choose whether you need
/bin/bash as the interpreter for your script.
Dash is not supposed to be used as the default shell on your systems. Just use Bash for that. For portability of your scripts, you can use Dash as the interpreter to increase the odds the scripts will run on other Linux flavors and Unixes.