sh pode significar shell Bourne ou / bin / sh, que é outro shell (compatível com POSIX) na maioria das plataformas modernas. "O shell POSIX" é o shell abstrato definido pelo POSIX , que é implementado pelo bash no modo POSIX, ou ksh ou dash por padrão. Às vezes, o / bin / sh também é chamado de shell POSIX, porque é um shell compatível com o POSIX na maioria das plataformas. As conchas Bourne originais não são conchas POSIX.
O bashref tem uma lista de diferenças entre as conchas bash e Bourne . man bash
possui uma lista de alterações quando o bash é chamado no modo POSIX .
/ bin / sh não é um link simbólico ou um link físico no OS X, mas é quase do mesmo tamanho 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
festança do homem :
Se o bash for chamado com o nome sh, ele tentará imitar o comportamento de inicialização das versões históricas do sh o mais próximo possível, além de estar em conformidade com o padrão POSIX.
A imitação de conchas Bourne é bastante limitada. bash +B
(Bourne) desabilitaria recursos como expansão de chaves.
$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}
Mas mesmo se você desabilitar o modo POSIX, o eco se comportará como echo -e
por padrão:
$ sh
$ shopt -uo posix
$ echo '1\b2'
2
/ bin / sh é um traço no Ubuntu , então alguns basismos funcionam com / bin / sh no OS X, mas não no Ubuntu.
Se você realmente deseja escrever scripts para (algo como) os shells Bourne originais, você pode usá-lo #!/usr/bin/env bash +B
.
Eu acho que é mais fácil escrever scripts para o bash do que evitar recursos que não fazem parte das especificações POSIX ou shells Bourne ou testar tudo com outros shells.
sh
ebash
): http://en.wikipedia.org/wiki/Comparison_of_command_shells