Was ist besser: printf oder echo?

Was ist besser: printf oder echo?

Zum Anzeigen von Nachrichten und Drucken von Daten stehen zwei Befehle zur Verfügung: printfund echo.
Wie unterscheiden sich ihre Verwendungsweisen? Welcher ist vorzuziehen?

Antwort1

Bevorzugt und am weitesten verbreitet ist nicht dasselbe. Obwohl printfes aus vielen Gründen besser ist, verwenden die meisten Leute es trotzdem, echoweil die Syntax einfacher ist.

Die Hauptgründe, warum Sie es vorziehen sollten, printfsind:

  1. echoist nicht standardisiert und verhält sich auf verschiedenen Systemen unterschiedlich.
  2. Es ist schwer vorherzusagen, was Sie tatsächlich ausführen, wenn Sie echo foo. Zur Veranschaulichung mein Debian-System:

    $ type -a echo
    echo is a shell builtin
    echo is /bin/echo
    

    Wie Sie sehen, gibt es zwei verschiedene echoBefehle, einer ist ein integriertes Shell-Befehl (in diesem Fall Bash) und der andere ist eine separate Binärdatei. Beachten Sie, dass bashauch dieser Befehl printfintegriert ist, sein Verhalten jedoch standardisierter ist, sodass dies weniger problematisch ist (danke an @ RaduRădeanu für den Hinweis).

  3. Da einige (aber nicht alle) Implementierungen von echoBefehlszeilenschalter unterstützen, ist es schwierig, einen String zu drucken, der mit einem beginnt -. Während viele Programme --das Ende von Schaltern und den Anfang von Argumenten kennzeichnen (z. B. grep -- -a filefindet es Zeilen in , filedie enthalten -a), echotut dies nicht. Wie können Sie also echodrucken -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
    

    printfDas geht ganz einfach:

    $ printf -- '-n\n'
    -n
    $ printf '%s\n' -n
    -n
    $ printf '\055n\n' 
    -n
    

Weitere Informationen, als Sie jemals wissen wollten, warum printfbesser ist als echo, finden Sie in dieser Antwort auf eine ähnliche Frage aufhttp://unix.stackexchange.com:

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

Antwort2

Die Frage, was vorzuziehen sei, ist allein schon unvollständig.

Wenn man nur eine oder mehrere Textzeilen ausgeben möchtedurch Zeilenumbrüche beendet, dann genügt echo. Wenn etwas Klügeres beabsichtigt ist, insbesondere das Einfügen einer „Teilzeile“, die keine neue Zeile enthält, dann ist printf am bestenzu diesem Zweck.

verwandte Informationen