DebianとUbuntuは、いくつかの理由でダッシュ(iirc)に切り替わりました。まず第一に、Bashは長年にわたって大きくなっています。実際、/bin/bash
Ubuntu 8.04システムのバイナリはのほぼ10倍(!)/bin/dash
です。さて、これは日常のシェル使用にとっては重要ではありませんが、次の状況では重要です。
- Dashははるかに小さいため、読み込みが速くなります。これは、initスクリプトの恩恵です。それらの多くを起動する必要がある場合、毎回Bashの代わりにDashをロードすると、速度が大幅に向上します。
- Dashのサイズが小さいため、DebianとUbuntuはinitrdのサイズのかなり大きな部分を削り取ることができ、他のもののためのより多くのスペースを残します(そして、再び高速化します)。
スクリプティングにBashの代わりにDashを使用することの欠点は、多くの人がBashだけが持っている構文上の機能、いわゆるBashismsを使用していることです。バシズムの例は、次のような部分文字列です。
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
この:
echo ${a#123}
4567890
一方、Dashは主にPOSIX準拠(およびそれ以上)を目指しており、これを試すとBad substitionエラーが発生します。
echo $SHELL
/bin/dash
# actually, it will read /bin/bash above, because if you just run dash
# it will not set the $SHELL variable :)
a=1234567890
echo ${a}
1234567890
echo ${a:3}
dash: Bad substitution
これは、シェルスクリプトのインタープリターとして/bin/sh
(したがってdash
)を使用し、その中でBashismを使用する場合に重要になります。DebianとUbuntuには、Bashismについての素晴らしいwikiページがあり、なぜ一般的なシェルスクリプト、特にinitスクリプトが悪いのかについて説明しています。そのため、あなたは意識的にあなたが必要とするかどうかを選択すべき/bin/sh
か/bin/bash
スクリプトのインタプリタとして。
ダッシュは、システムのデフォルトのシェルとして使用されることは想定されていません。そのためにはBashを使用してください。スクリプトの移植性のために、Dashをインタープリターとして使用して、他のLinuxフレーバーおよびUnixでスクリプトが実行される可能性を高めることができます。