sh може означати оболонку Bourne або / bin / sh, яка є деякою іншою оболонкою (сумісною з POSIX) на більшості сучасних платформ. "Оболонка POSIX" - це абстрактна оболонка, визначена POSIX , яка реалізована bash в режимі POSIX, або ksh або тире за замовчуванням. / bin / sh іноді також називають оболонкою POSIX, оскільки це оболонка, яка відповідає POSIX на більшості платформ. Оригінальні снаряди Борна не є оболонками POSIX.
bashref має перелік відмінностей між bash та Bourne снарядами . man bash
має список змін, коли bash викликається в режимі POSIX .
/ bin / sh не є символьним посиланням або жорстким посиланням на OS X, але він майже такого ж розміру, як / bin / bash:
$ ls -li /bin/{ba,}sh
29631757 -r-xr-xr-x 1 root wheel 1333920 Jul 26 01:52 /bin/bash
29631758 -r-xr-xr-x 1 root wheel 1334000 Jul 26 01:52 /bin/sh
man bash :
Якщо bash викликається ім'ям sh, він намагається максимально наблизити поведінку до запуску історичних версій sh, дотримуючись стандарт POSIX.
Інакше наслідування снарядів Борна інакше досить обмежене. bash +B
(Bourne) фактично відключить такі функції, як розширення дужок.
$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}
Але навіть якщо ви відключите режим POSIX, ехо поводиться так, як echo -e
за замовчуванням:
$ sh
$ shopt -uo posix
$ echo '1\b2'
2
/ bin / sh є тире на Ubuntu , тому деякі башими працюють з / bin / sh на OS X, але не Ubuntu.
Якщо ви насправді хочете написати сценарії для (щось на кшталт) оригінальних оболонок Борна, можете скористатися #!/usr/bin/env bash +B
натомість.
Я думаю, що простіше писати сценарії для bash, ніж уникати функцій, які не входять до специфікацій POSIX або оболонок Bourne, або перевіряти все за допомогою інших оболонок.
sh
таbash
): http://en.wikipedia.org/wiki/Comppare_of_command_shells