Как я могу напечатать «-n» с помощью `echo`?

Я чувствую себя очень глупо, но я не могу понять, как напечатать строку «-n» с более чем 30-летним командным echo .

Я пробовал:

 Michaels:Scripts$ echo -n Michaels:Scripts$ echo "-n" Michaels:Scripts$ echo -e "-n" Michaels:Scripts$ echo -- -n -- -n Michaels:Script$ echo -- "-n" -- -n Michaels:Script$ echo "\-n" \-n 

Я использую Mac OS X ML. Я считаю это поведение очень странным и неожиданным.

4 Solutions collect form web for “Как я могу напечатать «-n» с помощью `echo`?”

Если вы не хотите использовать prinf вас есть пара вариантов, по крайней мере, согласно этому SO Q & A, озаглавленному: echo «-n» не будет печатать -n? ,

Кажется, это ваш лучший вариант:

 $ echo "xn" | cut -c 2- -n 

Или какой-то вариант:

 $ echo -- '-n'|cut -d" " -f2 -n 

Printf

printf не имеет этой проблемы:

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

Почему вы хотите использовать echo ? Использовать printf :

 printf -- '-n\n' 

Или:

 printf '%s\n' -n 

С echo :

 echo -n 

Выведет -n<LF> в Unix-совместимое echo .

bash , dash , GNU или zsh echo (в их конфигурациях по умолчанию) могут сделать это с помощью:

 echo -en '-n\n' 

Или (в системах на основе ASCII):

 echo -e '\055n' 

Zsh echo может сделать это с помощью:

 echo - -n 

bash (но не zsh ):

 echo -n -; echo n 

Интересно, что невозможно выводить -n с echo в режиме POSIX (то есть более или менее, переносимо по Unices и Unix), так как поведение, если первый аргумент -n или если какой-либо аргумент содержит символы обратной косой черты не указано.

По историческим причинам echo не выполняет обычный анализ аргументов, где любой аргумент, который начинается с - это опция, кроме этого -- сигнализирует о завершении опции. Команда echo основном выводит свои аргументы без изменений, но в зависимости от варианта unix, оболочки и от того, как настроена оболочка, она может интерпретировать некоторые параметры ( -e , -E , -n , - ) и может обрабатывать символ обратной косой черты + специально.

Нет никакого переносного способа печати -n с echo одиночку. Портативный способ печати строки без необходимости беспокоиться о специальных символах

 printf %s -n 

или, в более общем случае, print %s "$somestring" . Если вы хотите напечатать окончательную новую строку после строки, сделайте это printf '%s\n' -n .

Попробуйте это, если вам нужно «-n» в качестве первых двух символов:

 echo -e '\rn' 

Еще один способ:

 echo -n '-'; echo 'n' 
  • Почему оболочки выполняют собственные команды «эхо» внутри?
  • echo string >> файл не работает
  • Как бы я запустил эту команду?
  • эхо-файл в виде отдельной строки с \ n
  • попытка избежать цитат
  • echo \\ * - bash backslash escape-поведение, оценивается ли он назад?
  • В чем разница между echo `date`, echo" date "и echo '' date`?
  • Комбинированный генератор с памятью и управлением ресурсами
  • Как остановить «grep» от вырезания трубы
  • Как удалить строку с эхом?
  • Выделение строки без кавычек
  • Linux и Unix - лучшая ОС в мире.