Как напечатать "-n" без выдачи новой строки?
Я пытаюсь распечатать -n
с использованием echo
команда. Но если я просто наберу echo -n
Выпускает только новую строку, а не появляется -n
вместо этого он выдает новую строку.
9 ответов
Проблема в том, что echo
интерпретирует -n
в качестве аргумента. В стандартной реализации bash это означает, что help echo
):
-n do not append a newline
Есть разные способы обойти это:
Превратите это во что-то, что невозможно, включив другого персонажа. Например, расскажите
echo
не печатать новую строку с-n
, а затем скажите ему, что нужно интерпретировать обратную косую черту-e
и добавьте новую строку явно.$ echo -ne '-n\n' -n
Или просто укажите пробел
$ echo " -n" -n
Это, однако, добавляет пробел, который вы, вероятно, не хотите.
Используйте непечатный символ перед ним. Вот. Я использую клавишу возврата (
\b
)$ echo -e "\b-n" -n
Это также добавляет дополнительный символ, который вы, вероятно, не хотите.
Используйте обман
$ echo n- | rev -n
rev
Команда просто печатает свой вывод в обратном порядке.Используйте правильный инструмент для работы
$ 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