sh peut signifier Bourne shell ou / bin / sh, qui est un autre shell (conforme POSIX) sur la plupart des plates-formes modernes. "Le shell POSIX" est le shell abstrait défini par POSIX , qui est implémenté par bash en mode POSIX, ou ksh ou dash par défaut. / bin / sh est parfois également appelé shell POSIX, car il s'agit d'un shell conforme à POSIX sur la plupart des plates-formes. Les coquilles Bourne d'origine ne sont pas des coquilles POSIX.
bashref a une liste de différences entre les coquilles bash et Bourne . man bash
a une liste de modifications lorsque bash est appelé en mode POSIX .
/ bin / sh n'est pas un lien symbolique ou un lien dur sous OS X, mais c'est presque la même taille que / 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
homme bash :
Si bash est appelé avec le nom sh, il essaie d'imiter le comportement de démarrage des versions historiques de sh aussi fidèlement que possible, tout en se conformant également à la norme POSIX.
L'imitation des coquilles Bourne est par ailleurs assez limitée. bash +B
(Bourne) désactiverait en fait des fonctionnalités telles que l'expansion de l'accolade.
$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}
Mais même si vous désactivez le mode POSIX, l'écho se comporte comme echo -e
par défaut:
$ sh
$ shopt -uo posix
$ echo '1\b2'
2
/ bin / sh est un tiret sur Ubuntu , donc certains bashismes fonctionnent avec / bin / sh sur OS X mais pas Ubuntu.
Si vous voulez réellement écrire des scripts pour (quelque chose comme) les shells Bourne d'origine, vous pouvez utiliser à la #!/usr/bin/env bash +B
place.
Je pense qu'il est plus facile d'écrire des scripts pour bash que d'éviter des fonctionnalités qui ne font pas partie des spécifications POSIX ou des shells Bourne ou de tout tester avec d'autres shells.
sh
etbash
): http://en.wikipedia.org/wiki/Comparison_of_command_shells