Qual é melhor printf ou eco?

Qual é melhor printf ou eco?

Para exibir mensagens e dados de impressão, existem dois comandos disponíveis printfe echo.
Então, quão diferentemente eles usaram? O que é mais preferível?

Responder1

Preferível e mais utilizado não é a mesma coisa. Embora printfseja melhor por vários motivos, a maioria das pessoas ainda usa echoporque a sintaxe é mais simples.

Os principais motivos pelos quais você deve preferir printfsão:

  1. echonão for padronizado, ele se comportará de maneira diferente em sistemas diferentes.
  2. É difícil prever o que você realmente está executando quando echo foo. Para ilustrar, no meu sistema Debian:

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

    Como você pode ver, existem dois echocomandos diferentes, um é um shell (neste caso, bash) integrado e outro é um binário separado. Observe que ele bashtambém possui um printfrecurso interno, mas seu comportamento é mais padronizado, portanto é menos problemático (obrigado a @ RaduRădeanu por apontar isso).

  3. Como algumas (mas não todas) implementações de echoopções de linha de comando suportam, é difícil imprimir uma string que comece com a -. Embora muitos programas suportem --para indicar o fim das opções e o início dos argumentos (por exemplo, grep -- -a fileencontrarão linhas fileque contêm -a), echoisso não acontece. Então, como você echoimprime -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
    

    printfpode fazer isso facilmente:

    $ printf -- '-n\n'
    -n
    $ printf '%s\n' -n
    -n
    $ printf '\055n\n' 
    -n
    

Para obter mais informações do que você gostaria de saber sobre por que printfé melhor que echo, consulte esta resposta a uma pergunta semelhante emhttp://unix.stackexchange.com:

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

Responder2

Perguntar o que é preferível é, por si só, incompleto.

Se tudo o que se deseja fazer é emitir uma ou mais linhas de textoencerrado por novas linhas, então echo é suficiente. Se for pretendido algo mais inteligente, incluindo especificamente uma "linha parcial" que não possui a nova linha, então printf é melhorpara aquele propósito.

informação relacionada