Por que echo com a opção -e se comporta de maneira diferente na linha de comando e no script sh?

Por que echo com a opção -e se comporta de maneira diferente na linha de comando e no script sh?

Usando LinuxMint 17.2, kernel 4.4.0-97-genérico. Criei um pequeno script TestEcho.sh que contém:

#!/bin/bash
echo -e "\e[1;31m Text in Color \e[0m\n"
for code in {33..43}; do echo -e "\e[38;05;${code}m $code: Text in Color"; done ; echo "";

O echo -ecomando, quando executado na linha de comando, fornece a saída esperada. ou seja, ele interpreta o código de escape e exibe o texto em cores.

O mesmo comando em um script .sh echoparece ignorar a -eopção e é exibido -ecomo texto literal. Além disso, o loop for também parece estar quebrado. Isso é causado por echo -e? E o mais importante, como consertar o script?

RESPONDER(obrigado George Vasiliou): Execute o script com bashem vez desh

$ bash ~/Download/TestEcho.sh

echo -e no cmdline vs dentro do script sh

Responder1

bash e sh são tipos diferentes de shell. bash é o mais recente e mais inteligente que sh. No seu script, você escreve #!/bin/bashque significa que ele será executado usando bashshell. Mas se você usar sh ~/Download/TestEcho.sh, ele será executado usando sho shell.

informação relacionada