Я только что заметил, что, похоже, флаг -e
не существует для echo
команды в моей оболочке в Linux. Это просто неправильная настройка или это "нормально"?
Некоторый код в качестве примера:
#!/bin/sh
echo -e "\e[3;12r\e[3H"
Печать:
-e \e[3;12r\e[3H
Это работало раньше! Я думаю, что некоторые stty
команды пошли ужасно неправильно, и теперь это больше не работает. Кто-то предположил, что мой sh
был на самом деле просто bash
.
shell
escape-characters
echo
BrainStone
источник
источник
echo
/bin/sh
dash
Ответы:
Поскольку вы использовали
sh
, а неbash
, тоecho
команда вsh
не имеет опции-e
. Сsh
manpage:И это тоже не имеет
\e
:источник
sh
Поддержка нескольких реализацийecho -e
, во время компиляцииbash
можно сказать не поддерживатьecho -e
. Просто этот конкретный sh (возможноdash
) не поддерживает, в-e
то время как этот конкретныйbash
делает.-e
это не POSIX (на самом деле POSIX echo обычно не принимает никаких опций (хотя разрешено поддерживать-n
), см. здесь ), и/bin/sh
в вашей системе это оболочка POSIX.-e
Это расширение принято в некоторых оболочках, но вы не должны полагаться на него, оно не переносимо. В идеале, используйтеprintf
или переключитесь на использование оболочки, которая имеетecho -e
.Также смотрите предостережения
\e
в комментариях ниже, которые следует заменить на\033
.источник
sh
тоже не распознает\e
. Использование\033
Обратите внимание, что в любое время и практически в любой оболочке вы можете выяснить, какой «echo» будет вызываться, набрав
type echo
илиwhich echo
. Обычно это встроенная оболочка. Так что это зависит от того, какой "эхо" установлен и на какой оболочке вы используете.источник
which echo
не должен использоваться, он, скорее всего, не скажет вам, используете ли вы встроенную функцию, потому чтоwhich
обычно это внешний двоичный файл.type
это хорошо, хотя.type which
илиwhich which
). ;)