Я пытаюсь распечатать, -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'
-ngrep '^-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/echoecho -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 удобного для тестирования)?