Um executável sh é um requisito para sistemas operacionais contemporâneos semelhantes ao Unix. Existem vários padrões (por exemplo, POSIX ) ditando o que isso significa, embora desde "unix-like" não significa necessariamente "certificado compatível" com qualquer coisa, a realidade varia um pouco. Em geral, eles pelo menos implementam algo compatível com o sh , o shell Bourne original. É por isso que sh é geralmente um link simbólico , e "sh" é melhor compreendido hoje como um padrão para o comportamento de tudo o que ele liga.
bash é o Bourne Again Shell , que é o que o sh geralmente vincula em Sistemas GNU / Linux (mas existem outras possibilidades, como dash e ash ).
O Bash inclui todos os recursos do sh e é destinado a fornecer compatibilidade retroativa para scripts sh. Aparentemente, há algumas possíveis falhas obscuras nessa compatibilidade, mas elas provavelmente não são muito significativas.
Portanto, em termos de funcionalidade, o bash estende sh; Ele faz tudo um sh e muito mais. Outra implementação sh estendida popular que também satisfaz POSIX é o KornShell , ksh .
A outra linhagem de shell de comando de propósito geral ainda usada no mundo * nix é shell C , csh . O shell C, no entanto, não é compatível com o código sh, e uma implementação nunca seria vinculada a sh .