Suponho que, se você executar
readlink -f $(which sh)
você não receberá o Bash como valor de retorno, mas o Dash. Você tem o preâmbulo correto, mas isso só importa se você executar o script como ./test2.sh
depois de torná-lo executável.
Agora você força o script através do interpretador sh
, que provavelmente é o Dash, e a construção [[]]
é específica do Bash.
Isso é "por quê?" Se você acabou de substituir os colchetes duplos por simples (e altere #!/bin/bash
para #!/bin/sh
, já que seu script agora está usando apenas as funções POSIX), ele deve ser executado como desejado.
Demonstração no Debian, com test.sh
com conteúdo:
#!/bin/bash
if [[ "string" == "string" ]]; then
echo This is Bash
fi
isso acontece:
$ readlink -f $(which sh)
/bin/dash
$ sh test.sh
test.sh: 2: test.sh: [[: not found
$ bash test.sh
This is Bash
$ chmod 755 test.sh
$ ./test.sh
This is Bash