Что лучше printf или echo?
Для отображения сообщения и печати данных доступны две команды printf
а также echo
,
Тогда как иначе они использовали? Что предпочтительнее?
2 ответа
Предпочтительный и наиболее широко используемый - это не одно и то же. В то время как 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 лучше всего подходит для этой цели.