В чем разница между оболочками Bash и Dash в Linux?

«В чем разница между оболочками Bash и Dash в Linux?» — вопрос из категории Linux и командная строка, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Bash и Dash — это разные командные оболочки (shell) в Unix-подобных системах, созданные для различных целей.

Критерий Bash (Bourne Again SHell) Dash (Debian Almquist SHell)
Назначение Мощная интерактивная оболочка и язык сценариев. Быстрая, легковесная оболочка, ориентированная на выполнение системных скриптов.
Функциональность Богатый функционал: автодополнение, арифметические операции ((...)), расширенные конструкции [[ ... ]]. Строго соответствует стандарту POSIX, минимальный набор функций.
Скорость Медленнее при запуске из-за размера и сложности. Запускается и выполняется значительно быстрее.
Использование Часто используется как оболочка по умолчанию для пользователей (/bin/bash). Часто является символьной ссылкой для /bin/sh, используется для системных скриптов при загрузке.

Пример кода, который работает в Bash, но не в Dash:

# Этот цикл работает только в Bash (и других расширенных оболочках)
for ((i=0; i<3; i++)); do
    echo "Bash: $i"
done

# POSIX-совместимый аналог, который работает и в Bash, и в Dash
for i in 0 1 2; do
    echo "POSIX: $i"
done

Почему это важно: Для переносимых системных скриптов, где важна скорость запуска (например, init-скрипты), пишут на POSIX-совместимом синтаксисе, который выполнит Dash. Для интерактивной работы и сложных скриптов используют Bash.