Antworten:
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 bevorzugen sollten, printfsind:
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:
$ type -a echo
echo is a shell builtin
echo is /bin/echo
Wie Sie sehen, gibt es zwei verschiedene echoBefehle, einen Shell-Befehl (in diesem Fall Bash) und einen separaten Binärbefehl. Beachten Sie, dass bashauch eine integrierte printfFunktion 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 echoBefehlszeilenschaltern 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 Beispiel grep -- -a filefinden Sie Zeilen file, die enthalten -a), echonicht. Also, wie haben Sie 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
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 printfdas besser ist als echo, finden Sie in dieser Antwort auf eine ähnliche Frage unter http://unix.stackexchange.com :
printfals besserer Dolmetscher vorzuziehen .
printf(siehe type -a).
printfist aber in POSIX strenger definiert und ich denke das Builtin folgt dem gleichen Standard. Die POSIX- Spezifikationen für echohingegen sind weniger streng und geben sogar ausdrücklich an, dass es Unterschiede zwischen den Implementierungen geben wird und dass printfdies bevorzugt werden sollte.
echo also buchstäblich keine objektiven technischen Vorteile . Ist das korrekt?
echoanstatt printfist , dass die forma einfacher sein kann. Wenn Sie wissen, was Sie drucken, echo fooist es schneller und einfacher zu tippen als printf 'foo\n'. Abgesehen davon gibt es beim Schreiben von Skripten, in denen eine Variable gedruckt werden muss, nie einen guten Grund für die Verwendung echo.
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 .
echoImplementierung ist "Vermeiden des Zeilenumbruchs" problemlos möglich echo -n. In der Tat -nist die tragbarste von Echo-Funktionen. Laut POSIX fehlt es in SystemV, ist aber in den meisten Unices vorhanden.
-nfür die BSDs und SystemV verlassen aber alles andere habe ich keine Ahnung.