Разница между sh и Bash
Разница между Bash и sh
При написании скриптов для оболочки мы часто используем /bin/sh и /bin/bash. Обычно я предпочитаю bash, но не совсем понимаю, в чем между ними разница.
Какова основная разница между Bash и sh?
На что нам следует обратить внимание при программировании на Bash и sh?
2 ответ(ов)
Они практически идентичны, но bash имеет больше функций. sh – это (более или менее) устаревший подмножество bash.
sh часто означает оригинальную Bourne shell, которая предшествует bash (Bourne *again* shell) и была создана в 1977 году. Однако на практике лучше рассматривать sh как высоко совместимую оболочку, соответствующую стандарту POSIX с 1992 года.
Скрипты, начинающиеся с #!/bin/sh или использующие оболочку sh, обычно делают это для обеспечения обратной совместимости. На любой UNIX/Linux системе должна быть оболочка sh. Например, в Ubuntu sh часто вызывает dash, а на MacOS это специальная версия POSIX bash. Эти оболочки могут быть предпочтительными для соблюдения стандартов, скорости или обратной совместимости.
bash новее оригинального sh, добавляет больше функций и стремится быть обратно совместимым с sh. Программы, написанные для sh, обычно работают без проблем в bash. bash доступен на почти всех системах Linux/UNIX и обычно используется по умолчанию, за исключением MacOS, где по умолчанию используется zsh, начиная с версии Catalina (10.15). FreeBSD, по умолчанию, не включает bash в комплект.
В операционной системе Linux существует несколько типов оболочек (shell). Хотя у оболочек много общих команд, каждая из них обладает уникальными возможностями. Давайте рассмотрим различные наиболее часто используемые оболочки.
Оболочка Sh:
Оболочка Sh, также известная как Bourne shell, была первой оболочкой, разработанной для компьютеров Unix Стивеном Борном в лабораториях AT&T Bell Labs в 1977 году. Она включает в себя множество инструментов для написания сценариев.
Оболочка Bash:
Оболочка Bash расшифровывается как Bourne Again Shell. Bash является стандартной оболочкой большинства дистрибутивов Linux и заменяет оболочку Sh (при этом сценарии, написанные для Sh, также могут выполняться в Bash). Оболочка Bash может выполнять подавляющее большинство сценариев оболочки Sh без модификаций и также предоставляет возможность редактирования командной строки.
Что означает "2>&1"?
Как выводить команды оболочки по мере их выполнения
Прерывание скрипта оболочки при возвращении любой команды ненулевого значения
Как узнать, в какой интерактивной оболочке я нахожусь (командная строка)
Ошибка «Команда не найдена» при присвоении переменной в Bash