Solución:
Ambos echo
y printf
son comandos integrados (printf
está integrado en Bash desde v2.0.2, 1998). echo
siempre sale con un estado 0 y simplemente imprime argumentos seguidos de un carácter de final de línea en la salida estándar, mientras que printf
permite la definición de una cadena de formato y proporciona un código de estado de salida distinto de cero en caso de falla.
printf
tiene más control sobre el formato de salida. Se puede usar para especificar el ancho de campo que se usará para el elemento, así como varias opciones de formato para los números (como qué base de salida usar, si se imprime un exponente, si se imprime un signo y cuántos dígitos imprimir después. el punto decimal). Esto se hace proporcionando la cadena de formato, que controla cómo y dónde imprimir los otros argumentos y tiene la misma sintaxis que el lenguaje C (%03d
, %e
, %+d
, …). Esto significa que debe escapar del símbolo de porcentaje cuando no se habla de formato (%%
).
Probablemente, si agrega el carácter de nueva línea que echo
utiliza de forma predeterminada (excepto cuando se utiliza -n
opción) obtendrá el mismo efecto.
printf "blahn" >/dev/udp/localhost/8125
En cuanto al rendimiento, siempre tuve en cuenta que echo
fue más rápido que printf
porque el último tiene que leer la cadena y formatearla. Pero probándolos con time
(también incorporado) los resultados dicen lo contrario:
$ time for i in {1..999999}; do echo "$i" >/dev/null; done
real 0m10.191s
user 0m4.940s
sys 0m1.710s
$ time for i in {1..999999}; do printf "$i" >/dev/null; done
real 0m9.073s
user 0m4.690s
sys 0m1.310s
Narración printf
para agregar caracteres de nueva línea, al igual que echo
hace por defecto:
$ time for i in {1..999999}; do printf "$in" >/dev/null; done
real 0m8.940s
user 0m4.230s
sys 0m1.460s
que obviamente es más lento que sin imprimir el n
, pero aún más rápido que echo
.
La diferencia es que echo
envía una nueva línea al final de su salida. No hay forma de “enviar” un EOF.
Esta es probablemente la mejor descripción de echo vs printf
http://www.in-ulm.de/~mascheck/various/echo+printf/
En un nivel muy alto .. printf es como echo pero se puede hacer más formateo.