Echo "-n" не будет печатать -n?

Очень похоже на этот вопрос.

Я выполняю несколько операций с помощью автоматизированного script в BASH. Иногда script натолкнется на "-n", и эхо попытается интерпретировать это.

Попытка:

 $ POSIXLY_CORRECT=1 /bin/echo -n

и

 $ POSIXLY_CORRECT=1 /bin/echo "-n"

Но он каждый раз интерпретировал аргумент.

Затем это, что работает, но возможно ударить экранированные символы в строках, поэтому я не хочу применять нулевой символ ко всем вводам и использовать -e.

$ echo -e "\x00-n"
-n

printf возможно, но его следует избегать, если нет других параметров (не все машины имеют printf как утилиту).

$printf "%s" "-n"
-n

Итак, есть способ получить эхо для печати "-n"?

Ответ 1

printf должен быть встроенным во все ваши оболочки, если только некоторые из ваших машин не имеют очень старых версий оболочки. Он был встроен в bash в течение длительного времени. Он, вероятно, более портативный, чем echo -e.

В противном случае нет способа получить echo параметры, о которых он заботится.

Изменить: от ответ на другой подобный вопрос; избегайте цитирования проблем с помощью printf с помощью этой удобной обертки, не содержащей цифровых прав:

ech-o() { printf "%s\n" "$*"; }

(Это ech-o, как в "без параметров" )

Ответ 2

Как префикс строки с символом (например, "x" ), который удаляется "на лету" с помощью разреза:

echo "x-n" | cut -c 2-

Ответ 3

echo "-n" сообщает оболочке поставить '-n' в качестве первого аргумента echo, символ для символа. Семантически, echo "-n" совпадает с echo -n. Попробуйте это вместо этого (это стандарт POSIX и должен работать на любой оболочке):

printf '%s\n' "-n"

Ответ 4

Если вы вызываете Bash с именем sh, он будет имитировать sh, где параметр -n недоступен для echo. Я не уверен, что это соответствует вашим потребностям.

$ /bin/sh -c 'echo -n'

Ответ 5

echo "-n" не будет печатать -n, потому что -n интерпретируется как опция для echo (см. help echo). Но вы можете использовать:

echo -e "\055n"

Ответ 6

Метод обмана:

echo -e  "\r-n"