Debian і Ubuntu перейшли на тире (iirc) через пару речей. Перш за все, Баш з часом став великим. Насправді /bin/bash
бінарний файл моєї системи Ubuntu 8.04 майже вдесятеро (!) Більший за /bin/dash
. Тепер це не має великого значення для щоденного використання оболонки, але це має значення в наступних ситуаціях:
- Тире набагато менше і, отже, завантажується швидше, що є користю для init-скриптів. Якщо вам доведеться почати багато з них, завантаження Dash замість Bash кожного разу значно прискорює роботу.
- Через менший розмір Dash, Debian і Ubuntu здатні відголити досить великий шматок розміру свого initrd, залишаючи більше місця для інших матеріалів (і знову ж таки, прискорюючи речі).
Мінус використання Dash замість Bash для сценаріїв полягає в тому, що багато людей використовують синтаксичні приємності, які має лише 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 (і не більше того), приведе до помилки помилки підрозділу, якщо ви спробуєте це:
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
як інтерпретатор своїх оболонок) та використовуєте в них башизми. У Debian та Ubuntu є гарні вікі-сторінки про башизми та про те, чому вони погані в оболонках взагалі та в init-скриптах зокрема. Тому ви повинні свідомо обирати, чи вам це потрібно, /bin/sh
чи /bin/bash
як інтерпретатор вашого сценарію.
Dash не повинен використовуватися як оболонка за замовчуванням у ваших системах. Просто використовуйте Bash для цього. Для портативності своїх сценаріїв ви можете використовувати Dash як інтерпретатор, щоб збільшити шанси, що сценарії працюватимуть на інших Linux та Unixes.