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