Как распечатать “-n”, не выпуская новую строку?

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

16
задан 23 November 2015 в 10:51

9 ответов

Проблема - это echo интерпретирует -n как аргумент. На реализации удара по умолчанию, которая означает (от help echo):

  -n  do not append a newline

Существуют различные способы обойти это:

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

    $ echo -ne '-n\n'
    -n
    
  2. С другой стороны, просто включайте пространство

    $ echo " -n"
     -n
    

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

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

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

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

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

    $ echo n- | rev
    -n
    

    rev управляйте просто печатает его инвертированный вывод.

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

    $ printf -- '-n\n'
    -n
    
28
ответ дан 23 November 2019 в 02:26

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

% printf "-n\n"       
-n
15
ответ дан 23 November 2019 в 02:26

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

echo -e  "\r-n"

Это - своего рода взлом.

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

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

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

Вы видите, которые допустимы help echo.

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

P.S. лучшее решение, по моему скромному мнению,

echo -e "-n\c"

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

echo -e "-n\n"

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

7
ответ дан 23 November 2019 в 02:26

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

echo "-n "

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

5
ответ дан 23 November 2019 в 02:26

Вы парни действительно сверхдумаете это.

 echo -e \\055n

Или без запаздывающей новой строки

 echo -en \\055n
5
ответ дан 23 November 2019 в 02:26

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

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

2
ответ дан 23 November 2019 в 02:26

В сценарии Bash можно работать:

echo -n -
echo n

Или в оболочке interacive:

echo -n - ; echo n

Этот echo es - символ и n символ.

2
ответ дан 23 November 2019 в 02:26

Три других пути:

$ echo -e '\x2dn' # ASCII hexadecimal value
-n
$ echo -e '\u002dn' # Unicode code point
-n
$ echo -e '\u2dn' # Unicode code point shortened
-n
1
ответ дан 23 November 2019 в 02:26

Можно работать

printf -n;echo

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

0
ответ дан 23 November 2019 в 02:26

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

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