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

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

2 ответа

Решение

Предпочтительный и наиболее широко используемый - это не одно и то же. В то время как 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 не. Итак, как у вас 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/:

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

Спросить, что предпочтительнее, само по себе неполноценно.

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

Другие вопросы по тегам