Respostas:
Preferível e mais utilizado não é a mesma coisa. Embora printfseja melhor por vários motivos, a maioria das pessoas ainda o usa echoporque a sintaxe é mais simples.
As principais razões pelas quais você prefere printfsão:
echo não for padronizado, ele se comportará de maneira diferente em sistemas diferentes.É 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 (bash neste caso) embutido e outro é um binário separado. Observe que bashtambém possui um printfbuilt-in, mas seu comportamento é mais padronizado, tornando-o menos problemático (obrigado a @ RaduRădeanu por apontar isso).
Como algumas implementações (mas não todas) de echoopções de linha de comando de suporte, é difícil imprimir uma sequência que comece com a -. Enquanto muitos programas suportam --para significar 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
printf pode fazer isso facilmente:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
Para mais informações do que você sempre quis saber sobre por que printfé melhor do que echo, veja esta resposta a uma pergunta semelhante sobre http://unix.stackexchange.com :
printfcomo melhor intérprete.
printf(ver type -a).
printfé mais rigidamente definido no POSIX e acho que o builtin segue o mesmo padrão. As especificações do POSIX, por echooutro lado, são menos rigorosas e até explicitamente afirmam que haverá diferenças entre as implementações e que printfdevem ser preferidas.
echo. Isso está correto?
echoem vez de printfé que a forma pode ser mais simples. Se você souber o que está imprimindo, echo fooé mais rápido e fácil digitar do que printf 'foo\n'. Além disso, ao escrever scripts em que uma variável precisa ser impressa, nunca há uma boa razão para usar echo.
Perguntar o que é preferível é incompleto.
Se tudo o que se deseja é emitir uma ou mais linhas de texto terminadas por novas linhas , o eco é suficiente. Se algo mais inteligente for pretendido, incluindo especificamente uma "linha parcial" que não possui a nova linha, então printf é melhor para esse fim .
echoimplementação, "evitar a nova linha" é fácil echo -n. De fato, -né o mais portátil dos recursos do eco. De acordo com o POSIX, ele está ausente do SystemV, mas está presente na maioria dos Unices.
-nBSDs e SystemV, mas qualquer outra coisa, não faço ideia.