Я пытаюсь распечатать, -n
используя echo
команду. Но если я просто наберу echo -n
, он выдает только новую строку, а не появляется -n
, вместо этого выдает новую строку.
getopt
(???) для разбора командной строки
Я пытаюсь распечатать, -n
используя echo
команду. Но если я просто наберу echo -n
, он выдает только новую строку, а не появляется -n
, вместо этого выдает новую строку.
getopt
(???) для разбора командной строки
Ответы:
Проблема в том, что echo
интерпретируется -n
как аргумент. В реализации bash по умолчанию это означает (с help echo
):
-n do not append a newline
Есть разные способы обойти это:
Превратите это во что-то, что невозможно, включив другого персонажа. Например, скажите echo
не печатать символ новой строки -n
, затем скажите ему интерпретировать экранирование обратной косой черты -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
grep '^-n'
. pritnf
это путь, действительно.
printf
в любом случае лучше, но вопрос касается просто echo
.
echo -e "-n\c"
делает то же самое.
\c
это подавить дальнейший вывод
Иногда хорошей идеей является использование правильного инструмента. Вы можете использовать printf
вместо этого:
% printf "-n\n"
-n
echo
, хотя printf
и лучше стандартизирован .
Вы можете использовать эту команду, но она добавляет дополнительный пробел.
echo -e "\r-n"
Это своего рода хак.
-e
включает символы команды обратной косой черты.
\r
это возврат каретки.
На самом деле любой \
допустимый символ будет делать в любом месте строки.
Вы можете увидеть, какие из них действительны help echo
.
echo "-n"
не работает, потому что -n
используется в качестве параметра для echo
.
PS Лучшее решение ИМХО это
echo -e "-n\c"
Это не добавляет никаких дополнительных символов .
echo -e "-n\n"
печатает то же самое, но с новой строкой char.
-n
действительно, -nfoo
не так, что будет напечатано.
man echo
тоже есть. Но help
это немного лучше.
/bin/echo
это совершенно другая вещь, и когда вы запускаете echo
в bash, вы получаете встроенные функции, которые могут сильно отличаться в зависимости от вашей оболочки.
Я думаю, что если вы определенно хотите использовать echo
только, это должно удовлетворить вас:
echo "-n "
Это работает, потому что, хотя -n
является допустимым параметром echo
, -n
с пробелом после него нет. Так как это не вариант, echo
просто печатает его.
Вы, ребята, действительно обдумываете это.
echo -e \\055n
Или без запятой
echo -en \\055n
printf "-n\n"
происходит переосмысление?
/bin/echo
echo -e "\055n"
Чтобы расширить ответ @ AB, единственный переносимый способ echo
- это воздерживаться от использования таких опций, как -n
. Попробуйте использовать printf
вместо этого, где это возможно Эта справочная страница содержит более подробную информацию и очень хорошо объясняет, когда и как echo
и как printf
следует использовать:
В настоящее время echo (1) является переносимым, только если вы опустите флаги и escape-последовательности. Вместо этого используйте printf (1), если вам нужно больше, чем просто текст.
В скрипте Bash вы можете запустить:
echo -n -
echo n
Или в интерактивной оболочке:
echo -n - ; echo n
Это echo
эс на -
характер и n
характер.
-pilot6@Pilot6:~$
. Вторые выходы n
.
&&
- я бы не сказал, что этот ответ неправильный .
Вы можете запустить
printf -n;echo
Проверено в Busybox Ash
ash
- это название Almquist Shell.
echo -n -- -n
(нет Linux-box удобного для тестирования)?