Para mostrar mensajes e imprimir datos hay dos comandos disponibles printf
y echo
.
Entonces, ¿qué tan diferente usaron? ¿Cuál es más preferible?
command-line
Pandya
fuente
fuente
Respuestas:
Preferible y más ampliamente utilizado no es lo mismo. Si bien
printf
es mejor por muchas razones, la mayoría de las personas todavía lo usanecho
porque la sintaxis es más simple.Las principales razones por las que debería preferir
printf
son: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:Como puede ver, hay dos
echo
comandos diferentes , uno es un shell (bash en este caso) integrado y otro es un binario separado. Tenga en cuenta quebash
también tiene una funciónprintf
incorporada, 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
echo
conmutadores 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 file
encontrará líneasfile
que contienen-a
),echo
no lo hace. Entonces, ¿cómo tienesecho
impresión-n
?printf
puede hacer esto fácilmente:Para obtener más información de la que siempre quiso saber por qué
printf
es mejorecho
, consulte esta respuesta a una pregunta similar en http://unix.stackexchange.com :/unix//a/65819/22222
fuente
printf
como mejor intérprete.printf
(vertype -a
).printf
está más rígidamente definido en POSIX y creo que el incorporado sigue el mismo estándar. Las especificaciones POSIX para,echo
por otro lado, son menos estrictas e incluso afirman explícitamente que habrá diferencias entre las implementaciones y esoprintf
debería preferirse.echo
. ¿Es eso correcto?echo
lugar deprintf
es que la forma puede ser más simple. Si sabe lo que está imprimiendo,echo foo
es más rápido y fácil de escribir queprintf 'foo\n'
. Aparte de eso, cuando se escriben scripts donde se necesita imprimir una variable, nunca hay una buena razón para usarlaecho
.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 .
fuente
echo
implementación, "evitar la nueva línea" se hace fácilmente conecho -n
. De hecho,-n
es 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.-n
de los BSD y SystemV pero todo lo demás, no tengo ni idea.