Ответы:
Предпочтительный и наиболее широко используемый - это не одно и то же. Хотя printfэто лучше по многим причинам, большинство людей все еще используют, echoпотому что синтаксис проще.
Основными причинами, по которым вам следует отдать предпочтение, printfявляются:
echo не стандартизирован, он будет вести себя по-разному в разных системах.Трудно предсказать, что ты на самом деле бежишь, когда ты echo foo. Для иллюстрации в моей системе Debian:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Как видите, есть две разные echoкоманды: одна представляет собой встроенную оболочку (в нашем случае bash), а другая - отдельный двоичный файл. Обратите внимание, что bashтакже имеетprintf встроенную но его поведение более стандартизировано, поэтому это не проблема (спасибо @ RaduRădeanu за указание на это).
Поскольку некоторые (но не все) реализации echoпереключателей поддержки командной строки трудно распечатать строку, которая начинается с -. Хотя многие программы поддерживают --указывать конец переключателей и начало аргументов (например, grep -- -a fileнайдут строки, fileкоторые содержат -a), echoэтого не происходит. Итак, как у вас есть echoпечать -n?
$ echo -n ## no output
$ echo '-n' ## no output
$ echo "-n" ## no output
$ echo \-n ## no output
$ echo -e '\055n' ## using the ASCII code works but only on implementations
-n ## that support -e
printf можно сделать это легко:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
Более подробную информацию о том, почему printfэто лучше echo, чем вы когда-либо хотели узнать , смотрите в ответе на аналогичный вопрос на http://unix.stackexchange.com. :
printfлучшего переводчика.
printf(см. type -a).
printfболее жестко определено в POSIX, и я думаю, что встроенная программа следует тому же стандарту. В POSIX спецификация для echoдругой стороны , является менее строгой и даже явно заявляет , что будет различие между реализациями и что printfдолжно быть предпочтительным.
echo. Это верно?
echoа не printfв том, что форма может быть проще. Если вы знаете, что вы печатаете, echo fooэто быстрее и проще, чем печатать printf 'foo\n'. Кроме того, при написании сценариев, в которых необходимо печатать переменную, нет веских причин для использования echo.
Спросить, что предпочтительнее, само по себе неполноценно.
Если все, что вы хотите сделать, это испустить одну или несколько строк текста, оканчивающихся символами новой строки , то достаточно эхо. Если предполагается что-то более умное, в частности, включающее «частичную строку», в которой нет новой строки, тогда printf лучше всего подходит для этой цели .
echoреализации «избежать новой строки» легко echo -n. На самом деле, -nэто самая портативная из функций эха. Согласно POSIX, он отсутствует в SystemV, но присутствует в большинстве Unices.
-nBSD и SystemV, но что-нибудь еще, я понятия не имею.