Respuestas:
Preferible y más ampliamente utilizado no es lo mismo. Si bien printfes mejor por muchas razones, la mayoría de las personas todavía lo usan echoporque la sintaxis es más simple.
Las principales razones por las que debería preferir printfson:
echo no está estandarizado, se comportará de manera diferente en diferentes sistemas.Es difícil predecir lo que realmente estás ejecutando cuando lo haces echo foo. Para ilustrar, en mi sistema Debian:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Como puede ver, hay dos echocomandos diferentes , uno es un shell (bash en este caso) integrado y otro es un binario separado. Tenga en cuenta que bashtambién tiene una función printfincorporada, pero su comportamiento está más estandarizado, por lo que es un problema menor (gracias a @ RaduRădeanu por señalarlo).
Dado que algunas (pero no todas) las implementaciones de los echoconmutadores de línea de comando de soporte, es difícil imprimir una cadena que comienza con a -. Si bien muchos programas admiten --significar el final de los cambios y el comienzo de los argumentos (por ejemplo, grep -- -a fileencontrará líneas fileque contienen -a), echono lo hace. Entonces, ¿cómo tienes echoimpresión -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 puede hacer esto fácilmente:
$ printf -- '-n\n'
-n
$ printf '%s\n' -n
-n
$ printf '\055n\n'
-n
Para obtener más información de la que siempre quiso saber por qué printfes mejor echo, consulte esta respuesta a una pregunta similar en http://unix.stackexchange.com :
printfcomo mejor intérprete.
printf(ver type -a).
printfestá más rígidamente definido en POSIX y creo que el incorporado sigue el mismo estándar. Las especificaciones POSIX para, echopor otro lado, son menos estrictas e incluso afirman explícitamente que habrá diferencias entre las implementaciones y eso printfdebería preferirse.
echo. ¿Es eso correcto?
echolugar de printfes que la forma puede ser más simple. Si sabe lo que está imprimiendo, echo fooes más rápido y fácil de escribir que printf 'foo\n'. Aparte de eso, cuando se escriben scripts donde se necesita imprimir una variable, nunca hay una buena razón para usarla echo.
Preguntar cuál es preferible es en sí mismo incompleto.
Si todo lo que se desea hacer es emitir una o más líneas de texto terminadas por nuevas líneas , entonces el eco es suficiente. Si se pretende algo más inteligente, incluyendo específicamente una "línea parcial" que no tiene la nueva línea, entonces printf es lo mejor para ese propósito .
echoimplementación, "evitar la nueva línea" se hace fácilmente con echo -n. De hecho, -nes la más portátil de las características de echo. Según POSIX, está ausente de SystemV pero presente en la mayoría de los Unices.
-nde los BSD y SystemV pero todo lo demás, no tengo ni idea.