¿Cuál es mejor printf o echo?

¿Cuál es mejor printf o echo?

Para mostrar mensajes e imprimir datos, hay dos comandos disponibles printfy echo.
Entonces, ¿qué tan diferente lo usaban? ¿Cuál es más preferible?

Respuesta1

Preferible y más utilizado no es lo mismo. Si bien printfes mejor por muchas razones, la mayoría de la gente todavía lo usa echoporque la sintaxis es más simple.

Las principales razones por las que deberías preferir printfson:

  1. echono está estandarizado, se comportará de manera diferente en diferentes sistemas.
  2. Es difícil predecir lo que estás ejecutando realmente cuando 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 incorporado (bash en este caso) y otro es un binario separado. Tenga en cuenta que bashtambién tiene una printffunción incorporada, pero su comportamiento está más estandarizado, por lo que es un problema menor (gracias a @RaduRădeanu por señalarlo).

  3. Dado que algunas (pero no todas) implementaciones de echosoporte para cambios de línea de comando, es difícil imprimir una cadena que comience con -. Si bien muchos programas admiten --indicar el final de los cambios y el comienzo de los argumentos (por ejemplo, grep -- -a fileencontrará líneas fileque contengan -a), echono lo hace. Entonces, ¿cómo se 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
    

    printfpuede 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 sobre por qué printfes mejor que echo, consulte esta respuesta a una pregunta similar enhttp://unix.stackexchange.com:

https://unix.stackexchange.com/a/65819/22222

Respuesta2

Preguntar cuál es preferible es en sí mismo incompleto.

Si todo lo que uno desea hacer es emitir una o más líneas de textoterminado 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 tenga la nueva línea, entonces printf es lo mejorpara ese propósito.

información relacionada