Таинственное поведение эхо-команды
Когда нам нужно использовать символы 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"'