Как напечатать "-n" без выдачи новой строки?

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

9 ответов

Решение

Проблема в том, что echo интерпретирует -n в качестве аргумента. В стандартной реализации bash это означает, что help echo):

  -n  do not append a newline

Есть разные способы обойти это:

  1. Превратите это во что-то, что невозможно, включив другого персонажа. Например, расскажите echo не печатать новую строку с -n, а затем скажите ему, что нужно интерпретировать обратную косую черту -e и добавьте новую строку явно.

    $ echo -ne '-n\n'
    -n
    
  2. Или просто укажите пробел

    $ echo " -n"
     -n
    

    Это, однако, добавляет пробел, который вы, вероятно, не хотите.

  3. Используйте непечатный символ перед ним. Вот. Я использую клавишу возврата (\b)

    $ echo -e "\b-n"
    -n
    

    Это также добавляет дополнительный символ, который вы, вероятно, не хотите.

  4. Используйте обман

    $ echo n- | rev
    -n
    

    rev Команда просто печатает свой вывод в обратном порядке.

  5. Используйте правильный инструмент для работы

    $ printf -- '-n\n'
    -n
    

Иногда хорошей идеей является использование правильного инструмента. Вы могли бы использовать printf вместо:

% printf "-n\n"       
-n

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

echo -e  "\r-n"

Это своего рода хак.

-e включает символы команды обратной косой черты.

\r это возврат каретки.

На самом деле любой \ допустимый символ будет делать в любом месте строки.

Вы можете увидеть, какие из них действительны help echo,

echo "-n" не работает, потому что -n используется в качестве параметра для echo,

PS Лучшее решение ИМХО это

echo -e "-n\c"

Это не добавляет никаких дополнительных символов.

echo -e "-n\n"

печатает то же самое, но с новой строкой char.

Вы, ребята, действительно обдумываете это.

 echo -e \\055n

Или без запятой

 echo -en \\055n

Я думаю, что если вы определенно хотите использовать echo только это должно вас удовлетворить

echo "-n "

Это работает, потому что пока -n является допустимым вариантом для echo, -n с пробелом после него нет. Так как это не вариант, echo просто печатает это.

Чтобы расширить ответ @AB, единственный портативный способ использования echo это воздерживаться от использования каких-либо опций, таких как -n, Рассмотреть возможность использования printf вместо того, где доступно. Эта справочная страница содержит более подробную информацию и очень хорошо объясняет, когда и как echo а также printf должен быть использован:

В настоящее время echo(1) является переносимым, только если вы опустите флаги и escape-последовательности. Вместо этого используйте printf(1), если вам нужно больше, чем просто текст.

В скрипте Bash вы можете запустить:

echo -n -
echo n

Или в интерактивной оболочке:

echo -n - ; echo n

это echoес - характер и n персонаж.

Три других способа:

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n

Вы можете запустить

printf -n;echo

Проверено в Busybox Ash

Другие вопросы по тегам