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

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

1
задан 23 November 2015 в 21:51

8 ответов

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

% printf "-n\n"       
-n
15
ответ дан 23 May 2018 в 15:33

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

echo -e  "\r-n"

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

-e позволяет использовать символы командной строки обратной косой черты. [ ! d2]

\r является возвратом каретки.

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

Вы можете видеть, какие действия действительны по help echo.

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

PS Лучшим решением IMHO является

echo -e "-n\c"

Он не добавляет PS .

echo -e "-n\n"

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

7
ответ дан 23 May 2018 в 15:33
  • 1
    Wov! Это лучше, чем мое; можете ли вы немного объяснить «начинающим»? ;-) – Sadi 23 November 2015 в 21:59
  • 2
    Спасибо, я также заметил, что неважно, где вы добавляете возврат каретки в начале или в конце. – Sadi 23 November 2015 в 22:05
  • 3
    @Sadi да, это потому, что добавление чего-либо делает его недействительным. -n действителен, -nfoo не так, чтобы он был напечатан. – terdon♦ 23 November 2015 в 22:20
  • 4
    @terdon man echo тоже. Но help немного лучше. – Pilot6 23 November 2015 в 22:22
  • 5
    Я знаю, что это так, это просто не актуально. /bin/echo - это совершенно другая вещь, и когда вы запускаете echo в bash, вы получаете встроенную версию, которая может быть совсем другой в зависимости от вашей оболочки. – terdon♦ 23 November 2015 в 22:23

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

echo "-n "

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

5
ответ дан 23 May 2018 в 15:33
  • 1
    Большинству зрителей здесь может потребоваться только «-n», а не «-n». – Star OS 8 December 2015 в 18:17

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

 echo -e \\055n

Или без конечной новой строки

 echo -en \\055n
5
ответ дан 23 May 2018 в 15:33
  • 1
    Как printf "-n\n" переоценивает? – Dmitry Grigoryev 24 November 2015 в 16:01
  • 2
    Да, я просто так ответил. Удалит мой ответ. Это относительно переносимо, поскольку оно работает со встроенным эхом и /bin/echo по крайней мере, если оно вызвано как echo -e "\055n" – abligh 24 November 2015 в 18:05
  • 3
    -Это не то, что я хочу. – Star OS 5 December 2015 в 23:24

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

В настоящее время эхо (1) является переносимым, если вы опускаете флаги и escape-последовательности. Вместо этого используйте printf (1), если вам требуется больше обычного текста.
2
ответ дан 23 May 2018 в 15:33
  • 1
    Я собираюсь продлить ответ, пожалуйста, отредактируйте ответ. – Star OS 8 December 2015 в 18:13
  • 2
    Я не уверен, что это хорошая идея изменить чужой ответ на этот вопрос, когда у него будет больше текста от меня, чем от оригинального автора. – Dmitry Grigoryev 8 December 2015 в 18:46

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

echo -n -
echo n

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

echo -n - ; echo n

Этот символ echo имеет символ - и n характер.

2
ответ дан 23 May 2018 в 15:33
  • 1
    Вы попробовали? Это неверно. – Pilot6 24 November 2015 в 00:34
  • 2
  • 3
    Первые выходные команды -pilot6@Pilot6:~$. Второй выход n. – Pilot6 24 November 2015 в 01:13
  • 4
    @ Pilot6 Зависит от того, запускаете ли вы его в интерактивном терминале или в скрипте bash, который не задан в вопросе. OTOH, если вам это нужно в терминале, просто просто объединить две строки с && - я бы не сказал, что этот ответ неверен . – ace 24 November 2015 в 01:16
  • 5
    Я отредактирую его, чтобы он стал намного понятнее для сценария bash. – Star OS 8 December 2015 в 18:14

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

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n
1
ответ дан 23 May 2018 в 15:33

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

printf -n;echo

Протестировано в Busybox Ash

0
ответ дан 23 May 2018 в 15:33
  • 1
    Ash? Ash? ПОКЕМОН, я имею в виду, что? – Star OS 9 December 2015 в 01:07
  • 2
    Я запустил ящик с загруженным ящиком – jiwopene 9 December 2015 в 01:19
  • 3
    Скажем, «Busybox» или "Ящик Busybox". Не только «Ash» люди с толкованием могут подумать об этом покемоном или о пепеле из вулканов. – Star OS 9 December 2015 в 01:22
  • 4
    Лучше. alt255alt255 – Star OS 9 December 2015 в 01:25
  • 5
    @StarOS ash - это имя оболочки Almquist. – muru 9 December 2015 в 01:51

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

Похожие вопросы: