Для отображения сообщений и данных печати доступны две команды printf
и echo
.
Тогда как по-другому они использовали? Что предпочтительнее?
Предпочтительный и наиболее широко используемый не то же самое. В то время как printf
лучше по многим причинам, большинство людей все еще использует echo
потому что синтаксис более прост.
Главные причины, почему необходимо предпочесть printf
:
echo
не стандартизирован, это будет вести себя по-другому в различных системах.Трудно предсказать то, что Вы на самом деле выполняете когда Вы echo foo
. Проиллюстрировать, в моей системе Debian:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Как Вы видите, существует два различных echo
команды, каждый - оболочка (удар в этом случае) встроенный, и другой - отдельный двоичный файл. Отметьте это bash
также имеет a printf
встроенный, но его поведение более стандартизирован так, это - меньше проблемы (благодаря RaduRădeanu для указания на него).
Начиная с некоторых (но не все) реализации echo
поддерживайте переключатели командной строки, трудно распечатать строку, которая запускается с a -
. В то время как много программ поддерживают --
показать конец переключателей и начало аргументов (например, 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 лучший с этой целью .