echo
это оболочка, встроенная в Bash и dash ( /bin/sh
). Если вы запускаете echo
из командной строки, вы используете встроенную Bash, если вы запускаете свой скрипт оболочки, sh
вы используете встроенную Dash.
Dash-версия echo
не знает -e
опции, а просто выводит что-то дословно без какой-либо специальной обработки \
последовательностей.
Либо используйте Bash для запуска сценария оболочки, либо используйте /bin/echo
вместо echo
:
/bin/echo -e "\e[1;31mThis is red text\e[0m"
Чтобы избежать проблем с разными версиями, echo
вы можете использовать printf
вместо этого. В отличие от этого, echo
printf
всегда интерпретирует \
последовательности, но не добавляет автоматически перевод строки в конце, поэтому вы должны добавить \n
в конце, если хотите.
Поскольку некоторые версии printf
не понимают, \e
вы должны использовать \033
вместо:
printf "\033[1;31mThis is red text\033[0m\n"
/bin/echo
с тире (/bin/sh
) и bash;echo
с Bash или./tes.sh
оба работает правильно. Код ниже работаетbash
только с. if [$ UID -ne 0]; затем echo "Не пользователь root", а echo "Root User" fi