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.