Для отображения сообщения и печати данных доступны две команды printf
и echo
.
Тогда как иначе они использовали? Что предпочтительнее?
command-line
Pandya
источник
источник
Ответы:
Предпочтительный и наиболее широко используемый - это не одно и то же. Хотя
printf
это лучше по многим причинам, большинство людей все еще используют,echo
потому что синтаксис проще.Основными причинами, по которым вам следует отдать предпочтение,
printf
являются:echo
не стандартизирован, он будет вести себя по-разному в разных системах.Трудно предсказать, что ты на самом деле бежишь, когда ты
echo foo
. Для иллюстрации в моей системе Debian:Как видите, есть две разные
echo
команды: одна представляет собой встроенную оболочку (в нашем случае bash), а другая - отдельный двоичный файл. Обратите внимание, чтоbash
также имеетprintf
встроенную но его поведение более стандартизировано, поэтому это не проблема (спасибо @ RaduRădeanu за указание на это).Поскольку некоторые (но не все) реализации
echo
переключателей поддержки командной строки трудно распечатать строку, которая начинается с-
. Хотя многие программы поддерживают--
указывать конец переключателей и начало аргументов (например,grep -- -a file
найдут строки,file
которые содержат-a
),echo
этого не происходит. Итак, как у вас естьecho
печать-n
?printf
можно сделать это легко:Более подробную информацию о том, почему
printf
это лучшеecho
, чем вы когда-либо хотели узнать , смотрите в ответе на аналогичный вопрос на http://unix.stackexchange.com. :/unix//a/65819/22222
источник
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.-n
BSD и SystemV, но что-нибудь еще, я понятия не имею.