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:
-
echo
nã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/echo
Como você pode ver, existem dois comandos
echo
diferentes, um é um shell (bash neste caso) embutido e outro é um binário separado. Note quebash
também possuiprintf
embutido, 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
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 emfile
que contêm-a
),echo
não. Então, como você temecho
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 :