Как напечатать "-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 -nrevКоманда просто печатает свой вывод в обратном порядке.Используйте правильный инструмент для работы
$ 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