Почему echo с опцией -e ведет себя по-разному в командной строке и в скрипте sh?

Почему echo с опцией -e ведет себя по-разному в командной строке и в скрипте sh?

Используя LinuxMint 17.2, ядро ​​4.4.0-97-generic. Я сделал небольшой скрипт TestEcho.sh, который содержит:

#!/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 "";

При выполнении команды echo -eв командной строке она выдает ожидаемый результат, т. е. интерпретирует escape-код и отображает текст в цвете.

Та же команда в скрипте .sh, echoпохоже, игнорирует -eопцию и отображает -eкак буквальный текст. Кроме того, цикл for, похоже, также сломан. Это вызвано echo -e? И что еще важнее, как исправить скрипт?

ОТВЕЧАТЬ(спасибо Джорджу Василиу): Запустить скрипт bashвместоsh

$ bash ~/Download/TestEcho.sh

echo -e в cmdline и внутри скрипта sh

решение1

bash и sh — это разные типы оболочек. bash — последняя и более умная, чем sh. В вашем скрипте вы пишете, #!/bin/bashчто это означает, что он будет работать с использованием bashоболочки. Но если вы используете sh ~/Download/TestEcho.sh, то он будет работать с использованием shоболочки.

Связанный контент