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:
-
echonão é padronizado, ele se comportará de maneira diferente em sistemas diferentes. -
É 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/echoComo você pode ver, existem dois comandos
echodiferentes, um é um shell (bash neste caso) embutido e outro é um binário separado. Note quebashtambém possuiprintfembutido, mas seu comportamento é mais padronizado, então é um problema menor (graças ao @ RaduRădeanu por apontá-lo). -
Como algumas (mas não todas) implementações de
echosuportam 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 fileencontrará linhas emfileque contêm-a),echonão. Então, como você temechoprint-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 -eprintfpode 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 :