Что лучше printf или echo?

Что лучше printf или echo?

Для отображения сообщения и печати данных доступны две команды printfи echo.
Тогда как по-разному они используются? Какая из них предпочтительнее?

решение1

Предпочтительный и наиболее широко используемый — это не одно и то же. Хотя printfлучше по многим причинам, большинство людей все равно используют, echoпотому что синтаксис проще.

Основные причины, по которым вам следует отдать предпочтение printf:

  1. echoне стандартизирован, он будет вести себя по-разному в разных системах.
  2. Трудно предсказать, что вы на самом деле запускаете, когда вы echo foo. Для иллюстрации, на моей системе Debian:

    $ type -a echo
    echo is a shell builtin
    echo is /bin/echo
    

    Как вы можете видеть, есть две разные echoкоманды, одна из которых — встроенная оболочка (в данном случае bash), а другая — отдельный двоичный файл. Обратите внимание, что bashу нее также есть printfвстроенная команда, но ее поведение более стандартизировано, так что это не такая уж и проблема (спасибо @ RaduRădeanu за указание на нее).

  3. Поскольку некоторые (но не все) реализации echoподдерживают переключатели командной строки, сложно напечатать строку, которая начинается с -. Хотя многие программы поддерживают --обозначение конца переключателей и начала аргументов (например, grep -- -a fileнайдет строки, fileсодержащие -a), echoэтого не происходит. Итак, как же получить echoprint -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:

https://unix.stackexchange.com/a/65819/22222

решение2

Вопрос о том, что предпочтительнее, сам по себе неполный.

Если все, что нужно сделать, это вывести одну или несколько строк текстазавершено новой строкой, то echo достаточно. Если предполагается что-то более умное, в частности, включение "частичной строки", не содержащей символа новой строки, то printf лучше всегодля этой цели.

Связанный контент