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"