
Я знаю, что echo -e
это не обычная команда. Я пробовал echo '-e'
, echo \-e
но они все равно не работают.
решение1
Лучшее решение — не использовать echo
, а вместо этого использовать printf
.
printf '%s\n' -e
Это работает с произвольными переменными:
var=-e
printf '%s\n' "$var"
...это означает, что вам не нужно выполнять какую-либо специальную подготовку/модификацию где-либо еще в вашем коде, исходя из знания того, что значение будет echo
d.
Кстати,спецификация команд оболочки POSIX дляecho
признает, что в том виде, в котором он реализован, он непереносим, и содержит примечание по этому поводу:
Невозможно переносимо использовать echo во всех системах POSIX, если не опущены ни -n (в качестве первого аргумента), ни escape-последовательности.
Утилиту printf можно использовать переносимо для эмуляции любого традиционного поведения утилиты echo следующим образом (предполагается, что IFS имеет стандартное значение или не установлен):
Историческое эхо System V и требования к реализациям XSI в этом томе POSIX.1-2008 эквивалентны:
printf "%b\n" "$*"
BSD-эхо эквивалентно:
if [ "X$1" = "X-n" ] then shift printf "%s" "$*" else printf "%s\n" "$*" fi
Новым приложениям рекомендуется использовать printf вместо echo.
(Выделено мной).
Тем не менее, в системах GNU существует альтернатива: запрос поведения, соответствующего стандартам.
$ POSIXLY_CORRECT=1 /bin/echo -e
-e
решение2
с новой строкой
echo -en '-e\n'
без новой строки
echo -e '-e\c'
с пробелами вокруг:
echo '-e ' echo ' -e'
с помощью клавиши backspace (спасибо Джозефу Р.):
echo -e ' \b-e'
(он выводит SPC BS - e LF, но при отправке на терминал, который отображается как
-e
BS, перемещает курсор назад на один столбец влево, что приводит-
к перезаписи SPC)
Поведение встроенной bash
функции echo
может зависеть от версии bash. Оно также зависит от окружения ( POSIXLY_CORRECT
, SHELLOPTS
и BASHOPTS
переменных), опций ( posix
, xpg_echo
), опций сборки и argv[0]
( sh
vs bash
). Здесь протестировано с GNU bash 4.2.53(1)
, сборкой по умолчанию, опциями по умолчанию, пустой средой, вызванной как bash
. Работает также с zsh 5.0.5
.
решение3
С помощью GNU echo
с -e
кодами ASCII для символов:
$ /bin/echo -e '\055'e
-e
055
— восьмеричное число ASCII для -
(см. man ascii
для краткой справки).
решение4
Используйте -n
, чтобы избежать новой строки:
$ echo -n - && echo e
-e