Für die Anzeige von Mitteilungs- und Druckdaten stehen zwei Befehle zur Verfügung printf
und echo
.
Wie unterschiedlich haben sie sich dann verhalten? Was ist vorzuziehen?
command-line
Pandya
quelle
quelle
Antworten:
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 bevorzugen sollten,
printf
sind:echo
ist nicht standardisiert, es wird sich auf verschiedenen Systemen unterschiedlich verhalten.Es ist schwer vorherzusagen, was Sie tatsächlich laufen, wenn Sie
echo foo
. Zur Veranschaulichung auf meinem Debian-System:Wie Sie sehen, gibt es zwei verschiedene
echo
Befehle, einen Shell-Befehl (in diesem Fall Bash) und einen separaten Binärbefehl. Beachten Sie, dassbash
auch eine integrierteprintf
Funktion vorhanden ist, deren Verhalten jedoch standardisierter ist, sodass es weniger problematisch ist (danke an @ RaduRădeanu für den Hinweis).Da einige (aber nicht alle) Implementierungen von
echo
Befehlszeilenschaltern Unterstützung bieten, ist es schwierig, eine Zeichenfolge zu drucken, die mit a beginnt-
. Während viele Programme unterstützen--
, um das Ende von Schaltern und den Anfang von Argumenten zu kennzeichnen (zum Beispielgrep -- -a file
finden Sie Zeilenfile
, die enthalten-a
),echo
nicht. Also, wie haben Sieecho
drucken-n
?printf
das geht ganz einfach:Weitere Informationen, als Sie jemals wissen wollten, warum
printf
das besser ist alsecho
, finden Sie in dieser Antwort auf eine ähnliche Frage unter http://unix.stackexchange.com :/unix//a/65819/22222
quelle
printf
als besserer Dolmetscher vorzuziehen .printf
(siehetype -a
).printf
ist aber in POSIX strenger definiert und ich denke das Builtin folgt dem gleichen Standard. Die POSIX- Spezifikationen fürecho
hingegen sind weniger streng und geben sogar ausdrücklich an, dass es Unterschiede zwischen den Implementierungen geben wird und dassprintf
dies bevorzugt werden sollte.echo
also buchstäblich keine objektiven technischen Vorteile . Ist das korrekt?echo
anstattprintf
ist , dass die forma einfacher sein kann. Wenn Sie wissen, was Sie drucken,echo foo
ist es schneller und einfacher zu tippen alsprintf 'foo\n'
. Abgesehen davon gibt es beim Schreiben von Skripten, in denen eine Variable gedruckt werden muss, nie einen guten Grund für die Verwendungecho
.Zu fragen, was vorzuziehen ist, ist selbst unvollständig.
Wenn man nur eine oder mehrere durch Zeilenumbrüche abgeschlossene Textzeilen ausgeben möchte , reicht das Echo aus. Wenn etwas Klügeres beabsichtigt ist, insbesondere eine "Teilzeile", die keine neue Zeile enthält, ist printf für diesen Zweck am besten geeignet .
quelle
echo
Implementierung ist "Vermeiden des Zeilenumbruchs" problemlos möglichecho -n
. In der Tat-n
ist die tragbarste von Echo-Funktionen. Laut POSIX fehlt es in SystemV, ist aber in den meisten Unices vorhanden.-n
für die BSDs und SystemV verlassen aber alles andere habe ich keine Ahnung.