Таинственное поведение эхо-команды

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

echo -e "Enter your name : \c"

Но когда мы включаем такие операторы в программу оболочки (файл.sh), это приводит к загадочной ошибке. Это печатает

-e Enter your name : 

Это не нужно -e вариант с командой echo, как будто мы пишем так

echo "Enter your name : \c"

Он показывает вывод без ошибок, но это не работает в оболочке.

Так в чем же причина? Я использую оболочку bash и версию Ubuntu 15.04.

1 ответ

Я полагаю, вы не использовали шебанг (#! /bin/bash в первой строке вашего скрипта). В этом случае скрипт запускается с использованием /bin/sh, который /bin/dash, А также echo в dash не поддерживает нестандартные -e (посмотрите на стандарт POSIX). Вы действительно не должны использовать echo -e, использование printf вместо этого для гораздо более портативного поведения. Посмотрите почему printf лучше чем эхо`? в Unix и Linux. Следующие команды должны вести себя одинаково:

bash -c 'printf "%s" "Enter your name"'
dash -c 'printf "%s" "Enter your name"'
Другие вопросы по тегам