sh può significare shell Bourne o / bin / sh, che è un'altra shell (conforme a POSIX) sulla maggior parte delle piattaforme moderne. "La shell POSIX" è la shell astratta definita da POSIX , che è implementata da bash in modalità POSIX, o ksh o dash di default. / bin / sh è talvolta chiamato anche shell POSIX, perché è una shell conforme a POSIX sulla maggior parte delle piattaforme. Le shell Bourne originali non sono shell POSIX.
bashref ha un elenco di differenze tra shell bash e Bourne . man bash
ha un elenco di modifiche quando viene invocato bash in modalità POSIX .
/ bin / sh non è un collegamento simbolico o hard link su OS X, ma ha quasi le stesse dimensioni di / 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
uomo bash :
Se bash viene invocato con il nome sh, cerca di imitare il comportamento di avvio delle versioni storiche di sh il più vicino possibile, pur essendo conforme allo standard POSIX.
Al contrario, l'imitazione delle conchiglie Bourne è piuttosto limitata. bash +B
(Bourne) disabiliterebbe effettivamente funzionalità come l'espansione del controvento.
$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}
Ma anche se disabiliti la modalità POSIX, l'eco si comporta come echo -e
per impostazione predefinita:
$ sh
$ shopt -uo posix
$ echo '1\b2'
2
/ bin / sh è un trattino su Ubuntu , quindi alcuni bashismi funzionano con / bin / sh su OS X ma non su Ubuntu.
Se in realtà si desidera scrivere script per (qualcosa del genere) delle shell Bourne originali, è possibile utilizzare #!/usr/bin/env bash +B
invece.
Penso che sia più facile scrivere script per bash che evitare funzionalità che non fanno parte delle specifiche POSIX o shell Bourne o testare tutto con altre shell.
sh
ebash
): http://it.wikipedia.org/wiki/Comparison_of_command_shells