
Zum Anzeigen von Nachrichten und Drucken von Daten stehen zwei Befehle zur Verfügung: printf
und echo
.
Wie unterscheiden sich ihre Verwendungsweisen? Welcher ist vorzuziehen?
Antwort1
Bevorzugt und am weitesten verbreitet ist nicht dasselbe. Obwohl printf
es aus vielen Gründen besser ist, verwenden die meisten Leute es trotzdem, echo
weil die Syntax einfacher ist.
Die Hauptgründe, warum Sie es vorziehen sollten, printf
sind:
echo
ist nicht standardisiert und verhält sich auf verschiedenen Systemen unterschiedlich.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
echo
Befehle, einer ist ein integriertes Shell-Befehl (in diesem Fall Bash) und der andere ist eine separate Binärdatei. Beachten Sie, dassbash
auch dieser Befehlprintf
integriert ist, sein Verhalten jedoch standardisierter ist, sodass dies weniger problematisch ist (danke an @ RaduRădeanu für den Hinweis).Da einige (aber nicht alle) Implementierungen von
echo
Befehlszeilenschalter 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 file
findet es Zeilen in ,file
die enthalten-a
),echo
tut dies nicht. Wie können Sie alsoecho
drucken-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
Das geht ganz einfach:$ printf -- '-n\n' -n $ printf '%s\n' -n -n $ printf '\055n\n' -n
Weitere Informationen, als Sie jemals wissen wollten, warum printf
besser ist als echo
, finden Sie in dieser Antwort auf eine ähnliche Frage aufhttp://unix.stackexchange.com:
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.