Para exibir dados de mensagens e imprimir, existem dois comandos disponíveis printf
e echo
.
Então, o quão diferente eles usaram? Qual é o mais preferível?
command-line
Pandya
fonte
fonte
Respostas:
Preferível e mais utilizado não é a mesma coisa. Embora
printf
seja melhor por vários motivos, a maioria das pessoas ainda o usaecho
porque a sintaxe é mais simples.As principais razões pelas quais você prefere
printf
sã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:Como você pode ver, existem dois
echo
comandos diferentes , um é um shell (bash neste caso) embutido e outro é um binário separado. Observe quebash
também possui umprintf
built-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
echo
opçõ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 file
encontrarão linhasfile
que contêm-a
),echo
isso não acontece. Então, como vocêecho
imprime-n
?printf
pode fazer isso facilmente:Para mais informações do que você sempre quis saber sobre por que
printf
é melhor do queecho
, veja esta resposta a uma pergunta semelhante sobre http://unix.stackexchange.com :/unix//a/65819/22222
fonte
printf
como melhor intérprete.printf
(vertype -a
).printf
é mais rigidamente definido no POSIX e acho que o builtin segue o mesmo padrão. As especificações do POSIX, porecho
outro lado, são menos rigorosas e até explicitamente afirmam que haverá diferenças entre as implementações e queprintf
devem ser preferidas.echo
. Isso está correto?echo
em vez deprintf
é que a forma pode ser mais simples. Se você souber o que está imprimindo,echo foo
é mais rápido e fácil digitar do queprintf 'foo\n'
. Além disso, ao escrever scripts em que uma variável precisa ser impressa, nunca há uma boa razão para usarecho
.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 .
fonte
echo
implementação, "evitar a nova linha" é fácilecho -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.-n
BSDs e SystemV, mas qualquer outra coisa, não faço ideia.