Isso depende do sistema que você está executando. Um grande número de sistemas operacionais, especialmente os baseados em Linux, sh
é um link para bash
.
Nesse caso, ainda existem algumas diferenças no comportamento em que bash
tenta ser mais parecido com o tradicional bourne shell quando chamado sh
, mas ainda aceita a maioria dos bashisms.
Em alguns outros sistemas operacionais, como os baseados no Debian, sh
é fornecido por dash
, não bash
. Isso faz uma diferença muito maior, pois dash
não suporta bashisms, sendo projetado para ser uma implementação de shell POSIX limpa.
Em sistemas operacionais proprietários, sh
geralmente é fornecido por um ksh88
compatível com POSIX, que, como dash
, não implementa bashisms. No Solaris 10 e mais antigo, dependendo do seu PATH, sh
provavelmente será um shell Bourne legado, anterior ao POSIX.
Em qualquer caso, você provavelmente obteve a mesma saída com seu teste, simplesmente porque seu script não estava usando nenhum comando, opção ou sintaxe específicos do bash
.
Quando você executa ./executable
, qual shell será executado depende essencialmente do shebang escrito no início do script .executable. Isso será bash
se o shebang especificar:
#!/bin/bash
....
Se não houver shebang e você chamar o script de um shell compatível com POSIX, o script deve ser tecnicamente executado pela primeira sh
encontrada no PATH. Muitos interpretadores de shell como bash
, dash
e ksh
estão se considerando POSIX, então interpretarão o script. Observe que a variável de ambiente SHELL
não é usada aqui.