Qual é melhor printf ou echo?

13

Para exibir dados de mensagem e impressão, há dois comandos disponíveis printf e echo . Então, quão diferente eles usaram? Qual é mais preferível?

    
por Pandya 16.05.2014 / 15:22

2 respostas

24

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

As principais razões pelas quais você deve preferir printf são:

  1. echo não é padronizado, ele se comportará de maneira diferente em sistemas diferentes.
  2. É difícil prever o que você está realmente executando quando você 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 comandos echo diferentes, um é um shell (bash neste caso) embutido e outro é um binário separado. Note que bash também possui printf embutido, mas seu comportamento é mais padronizado, então é um problema menor (graças ao @ RaduRădeanu por apontá-lo).

  3. Como algumas (mas não todas) implementações de echo suportam opções de linha de comando, é difícil imprimir uma cadeia que comece com - . Embora muitos programas suportem -- para significar o fim das opções e o início dos argumentos (por exemplo, grep -- -a file encontrará linhas em file que contêm -a ), echo não. Então, como você tem echo print -n ?

    $ echo -n           ## no output
    $ echo '-n'         ## no output
    $ echo "-n"         ## no output
    $ echo \-n          ## no output
    $ echo -e '5n'   ## using the ASCII code works but only on implementations
    -n                  ## that support -e
    

    printf pode fazer isso facilmente:

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

Para obter mais informações do que você jamais quis saber sobre o motivo pelo qual printf é melhor que echo , veja esta resposta para uma pergunta semelhante no link :

link

    
por terdon 16.05.2014 / 15:37
4

Perguntar o que é preferível é em si incompleto.

Se tudo o que se deseja fazer é emitir uma ou mais linhas de texto terminadas por novas linhas , o eco é suficiente. Se algo mais inteligente for intencional, incluindo especificamente uma "linha parcial" que não tenha a nova linha, então printf é o melhor para esse propósito .

    
por Monty Harder 16.05.2014 / 19:09