Я пытаюсь распечатать -n
использование echo
команда. Но если я просто ввожу echo -n
, это только выпускает новую строку, не обнаруживаются -n
, вместо этого это выпускает новую строку.
Проблема - это echo
интерпретирует -n
как аргумент. На реализации удара по умолчанию, которая означает (от help echo
):
-n do not append a newline
Существуют различные способы обойти это:
Превратите его во что-то, что не является опцией включением другого символа. Например, сказать echo
не распечатать новую строку с -n
, затем скажите этому интерпретировать Escape обратной косой черты с -e
и добавьте новую строку явно.
$ echo -ne '-n\n'
-n
С другой стороны, просто включайте пространство
$ echo " -n"
-n
Это, однако, добавляет пространство, которое Вы, вероятно, не хотите.
Используйте непечатаемый символ перед ним. Здесь. Я использую клавишу Backspace (\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
.
P.S. лучшее решение, по моему скромному мнению,
echo -e "-n\c"
, Оно не добавляет никакие дополнительные символы .
echo -e "-n\n"
печать то же, но с символом новой строки.
Я думаю, хотите ли Вы определенно использовать echo
только, это должно удовлетворить Вас:
echo "-n "
Это работает потому что, в то время как -n
допустимая опция для echo
, -n
с пространством после того, как это не. Так как это не опция, echo
просто печать это.
Вы парни действительно сверхдумаете это.
echo -e \\055n
Или без запаздывающей новой строки
echo -en \\055n
Для расширения ответа @A.B единственный портативный способ использовать echo
состоит в том, чтобы воздержаться от использования любых опций как -n
. Рассмотрите использование printf
вместо этого где это возможно. Эта ссылочная страница предоставляет больше подробную информацию и объясняет очень хорошо, когда и как echo
и printf
должен использоваться:
В наше время, эхо (1) является только портативным при исключении флагов и escape-последовательностей. Используйте printf (1) вместо этого, при необходимости в больше, чем простой текст.
В сценарии Bash можно работать:
echo -n -
echo n
Или в оболочке interacive:
echo -n - ; echo n
Этот echo
es -
символ и 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