Inhaltsverzeichnis
ToggleEinführung
Der Bash-Befehl printf bietet Ihnen beim Schreiben in ein Linux-Terminalfenster mehr Flexibilität und Formatierungsoptionen als der echo-Befehl. Sogar die Besonderheiten von printf können von Vorteil sein.
Es ist einer der grundlegendsten Aspekte der Arbeit mit Software. Sie lesen, was die Anwendung auf den Bildschirm geschrieben hat. Trotz der von Unix abgeleiteten und von Linux unterstützten Angewohnheit, Befehlszeilenprogramme so kurz wie möglich zu halten, schreiben viele Anwendungen nur dann an das Terminal, wenn etwas schief geht. Eine entscheidende Programmiergrundlage besteht darin, den Benutzer darüber zu informieren, was passiert, passieren wird oder kürzlich passiert ist.
Der echo-Befehl in der Bash-Shell kann Text in die Terminalanzeige schreiben. Sie können es in Skripten oder auf der Befehlszeile verwenden, und es kann mit Variablen umgehen und ihre Werte anzeigen, wenn sie in der Zeichenfolge enthalten sind. Also, was ist der Sinn von printf? Ist das Schreiben von Texten nicht etwas, um das Echo sich kümmert? Printf hingegen bietet mehr als nur die Möglichkeit, Strings in Terminalfenster zu schreiben. Es gibt Ihnen viel Vielseitigkeit bei der Formatierung der Ausgabe und hat ein paar zusätzliche Tricks im Ärmel.
Der printf-Befehl in Bash ähnelt der printf-Funktion in C, es gibt jedoch einige Änderungen. Sie müssen sich der Änderungen bewusst sein, wenn Sie mit C vertraut sind.
Erstellen einfacher Zeichenfolgen
Schauen wir uns die Unterschiede zwischen echo und printf an, wenn es darum geht, Strings in das Terminal zu schreiben.
Echo Hier sind einige Worte
printf Hier sind einige Wörter
Während echo alle Wörter druckt, veröffentlicht printf einfach das erste. Außerdem gibt printf keine neue Zeile aus. Die Ausgabe befindet sich genau in der Mitte der Eingabeaufforderung. Aber in erster Linie müssen alle Wörter zitiert werden, damit printf darauf reagieren kann.
Echo Hier sind einige Worte
printf "hier sind ein paar Wörter"
Das ist ein Schritt nach vorne. Wir haben alle Wörter gedruckt, aber wir warten immer noch auf eine neue Zeile. Das liegt daran, dass printf nur dann eine neue Zeile druckt, wenn Sie dies ausdrücklich anfordern. Das mag unbequem klingen, aber Sie können wählen, ob Sie eine hinzufügen möchten oder nicht. Sie müssen Ihrem String „n“ hinzufügen, damit printf eine neue Zeile ausgibt. Hier wird die Escape-Sequenz „newline“ verwendet.
Echo Hier sind einige Worte
printf "hier sind einige Wörtern"
Sie werden manchmal einen Zeilenumbruch verwenden und andere nicht. In diesem Beispiel verwendet ein printf-Befehl eine neue Zeile, während der andere dies nicht tut.
printf "How-To" && printf "Geekn"
Da der erste printf keine neue Zeile druckt, wird die Ausgabe des zweiten printf in dieselbe Zeile wie „How-To“ platziert. Um eine neue Zeile zu drucken, verwendet der zweite printf n. Die Eingabeaufforderung wird nun in der Zeile unter dem gedruckten Text angezeigt.
Charaktere, die sich der Gefangennahme entzogen haben
Hier sind einige zusätzliche Zeichen, die als Escapezeichen verwendet werden können. Sie haben bereits gesehen, wie „n“ funktioniert.
n: Wechselt zu einer neuen Zeile.
r: Dieser Befehl druckt einen Wagenrücklauf. Der Ausgabecursor wird an den Anfang der aktuellen Zeile zurückgesetzt.
t: Dieser Befehl druckt ein Tabulatorzeichen.
v: Fügt der Seite einen vertikalen Tabstopp hinzu.
\: Ein Backslash-Zeichen wird gedruckt.
“: Zeigt ein Anführungszeichen an.
b: Zeigt das Backspace-Zeichen an.
Das Carriage-Return-Escape-Zeichen wird verwendet, um den Cursor an den Anfang der aktuellen Zeile zurückzusetzen.
printf "Honig ist die Wurzel allen Übels"
Der printf-Befehl liest von links nach rechts. Bis printf das Fluchtzeichen „r“ erkennt, wird der String wie normaler Text geschrieben. Der Ausgabecursor wird an den Anfang der aktuellen Zeile neu positioniert.
Mit dem Buchstaben direkt unter dem „r“-Zeichen wird die Verarbeitung des Strings fortgesetzt. Der Rest bewirkt, dass printf „Money“ ausgibt, was den Ausdruck „Honey“ ersetzt.
Der Backslash „“ signalisiert Escape-Sequenzen, während das Anführungszeichen „““ verwendet wird, um Zeichenfolgen zu zitieren. Wenn Sie diese Zeichen drucken möchten, verwenden Sie einen umgekehrten Schrägstrich, um sie zu maskieren. Dies weist printf an, dass sie als Literalzeichen behandelt werden sollen.
printf "Dies ist ein tTab, dies ist ein Anführungszeichen ", und dies \ ist ein Backslashn"
Variablen in Aktion
Die Verwendung von Variablen mit printf ist der Verwendung von Variablen mit echo sehr ähnlich. Um eine Variable wie diese Umgebungsvariable einzubinden, verwenden Sie wie gewohnt das Dollarzeichen „$“ davor.
printf "Home-Verzeichnis: $HOMen"
Zeichenfolgenformatierung
Formatstrings sind Strings, die das Ausgabeformat angeben. Sie geben den Text der Formatzeichenfolge und zusätzliche Werte an, mit denen Sie als Argumente arbeiten können.
Text, Escape-Sequenzen und Formatbezeichner können alle in der Formatzeichenfolge enthalten sein.
Die Formatbezeichner von Printf teilen ihm mit, welche Art von Argument akzeptiert werden soll, wie z. B. Zeichenfolgen, Zahlen oder Zeichen.
Die häufigsten Formatbezeichner sind unten aufgeführt. Allen vorangestellt ist ein Prozentzeichen „Prozent“. Sie können ein Prozentzeichen drucken, indem Sie zwei Prozentzeichen „Prozent Prozent“ kombinieren.
- %s: Druckt eine Zeichenfolge.
- %c: Druckt ein einzelnes Zeichen.
- %d: Gibt eine Ganzzahl aus.
- %f: gibt eine Fließkommazahl aus.
- %u: Gibt eine Ganzzahl ohne Vorzeichen aus.
- %o: Druckt einen Wert in Oktal.
- %x: Druckt einen Wert inhexadezimal, in Kleinbuchstaben.
- %X: Gibt einen Wert hexadezimal in Großbuchstaben aus.
- %e: Gibt eine Fließkommazahl in wissenschaftlicher Schreibweise in Kleinbuchstaben aus.
- %E: Druckt eine Fließkommazahl in wissenschaftlicher Schreibweise in Großbuchstaben.
- %%: Druckt ein Prozentsymbol „%“.
printf "How-To %sn" "Geek"
printf "%s%s %sn" "How" "-To" "Geek"
Die Formatzeichenfolge des ersten Befehls enthält eigenen Inhalt. Der String „Geek“ wird als Argument an printf gesendet. Der Formatbezeichner „%s“ stimmt mit ihm überein und gibt ihn aus. Zwischen dem Format-String und dem Argument-String ist nur ein Leerzeichen. In C wäre zur Trennung ein Komma erforderlich, aber bei der Bash-Version von printf reicht ein Leerzeichen.
In der zweiten Formatzeichenfolge sind nur Formatbezeichner und die Newline-Escape-Sequenz enthalten. Jeder der „%s“-Formatbezeichner verbraucht der Reihe nach die drei String-Parameter. Auch hier ist in C ein Komma zwischen jedem Parameter erforderlich, aber die Bash-Funktion printf erlaubt es uns, diese Anforderung zu ignorieren.
Verwenden Sie einfach den richtigen Formatbezeichner, um verschiedene Arten von Argumenten auszugeben. Hier ist eine einfache printf-basierte Zahlenkonvertierungsfunktion. In dezimaler, oktaler und hexadezimaler Schreibweise geben wir die Zahl 15 aus.
printf "Dec: %dnOct: %onHex: %xn" 15 15 15
Lassen Sie es uns ein wenig reduzieren, um das Beispiel weniger überladen zu machen.
printf "Hex: %xn" 15
Die meisten von uns sind daran gewöhnt, Hexadezimalzahlen in Großbuchstaben und mit Werten kleiner als 0x10 mit vorangestellter Null zu sehen. Wir können dies tun, indem wir einen Breitenbezeichner zwischen dem Prozentzeichen „%“ und dem „X“-Zeichen platzieren und den hexadezimalen Großbuchstaben-Formatbezeichner „% X“ verwenden.
Dies gibt die Größe des Feldes an, in dem das Argument an printf ausgegeben werden soll. Dem Feld wurden Leerzeichen hinzugefügt. Zweistellige Zahlen werden in diesem Stil ohne Auffüllung dargestellt.
printf "Hex: %2Xn" 15
Wir haben jetzt einen Wert in Großbuchstaben mit einem führenden Leerzeichen darauf geschrieben. Indem wir eine Null vor die beiden setzen, können wir printf das Feld mit Nullen anstelle von Leerzeichen auffüllen lassen:
printf "Hex: %02Xn" 15
Mit dem Genauigkeitsbezeichner können Sie angeben, wie viele Dezimalstellen in der Ausgabe enthalten sein sollen.
printf "Floating point: %08.3fn" 9.243546
Dadurch wird das Erstellen von Ergebnistabellen mit perfekt ausgerichteter Ausgabe zum Kinderspiel. Dieser Befehl zeigt auch eine weitere Eigenart von Bash printf an. Wenn es mehr Argumente als Formatbezeichner gibt, werden die Argumente in Stapeln in den Formatstring eingespeist, bis sie alle aufgebraucht sind. Die Anzahl der Formatbezeichner in der Formatzeichenfolge bestimmt die Größe des Stapels, der zu einem bestimmten Zeitpunkt verarbeitet wird. Zusätzliche Argumente, die an die printf-Funktion in C gesendet werden, werden ignoriert.
printf "Float: %8.3fn" 9,243546 23,665 8,0021
Zeichenfolgen können auch die Breiten- und Genauigkeitsbezeichner verwenden. Mit diesem Befehl werden die Strings in einem 10 Zeichen breiten Feld ausgegeben.
printf "%10s %dn" "coats" 7 "shoes" 22 "Umbrellas" 3
Standardmäßig werden Werte in ihren Feldern rechtsbündig ausgerichtet. Um sie linksbündig auszurichten, verwenden Sie ein Minuszeichen „-
„direkt hinter dem Prozent“%
" Schild.
printf "%-10s %d" "Mäntel" 7 "Schuhe" 22 "Regenschirme" 3
Mit der Genauigkeitsangabe können Sie die maximale Anzahl der zu druckenden Zeichen auswählen. Die Doppelpunktbuchstaben „:“ werden verwendet, um die Beschränkungen des Breitenfelds anzuzeigen. Nicht so, wie der Begriff „Regenschirme“ abgekürzt wird.
printf ":%10.6s:n" "coats" "shoes" "Umbrellas"
printf ":%-10.6s:n" "Mäntel" "Schuhe" "Regenschirme"
Auch als Argument kann der Breitenbezeichner verwendet werden. Verwenden Sie anstelle eines numerischen Bezeichners ein Sternchen „*“ und geben Sie die Breite als ganzzahlige Eingabe an.
printf "%*sn" 20 "ganz rechts" 12 "Mitte" 5 "ganz links"
Andere Kuriositäten und Gimmicks
Die Formatbezeichner in der Formatzeichenfolge arbeiten mit Werten des richtigen Typs, unabhängig davon, ob sie als normale Argumente in der Befehlszeile bereitgestellt oder als Ergebnis eines Ausdrucks erstellt werden.
Dies zeigt das Ergebnis der Addition zweier Zahlen an:
printf "23+32=%dn" $((23+32))
Die Anzahl der Ordner im aktuellen Arbeitsverzeichnis wird mit diesem Befehl gedruckt:
printf "Es gibt %d Verzeichnissen" $(ls -d */ | wc -l)
Der Befehl printf gibt eine Zeichenfolge aus, die von einem anderen Programm zurückgegeben wurde.
printf "Aktueller Benutzer: %sn" $(whoami)
Wenn der Zeichenfolgenformatbezeichner „Prozent s“ nicht mit einem Argument angegeben wird, gibt printf null zurück.
printf "Eins: %s Zwei: %sn" "Alpha"
Wenn versehentlich ein numerischer Wert für den Zeichenfolgenformatbezeichner „% s“ angegeben wird, gibt er ihn als Zeichenfolge aus und beschwert sich nicht. Wenn Sie dies mit C printf tun, werden Sie viele Probleme bekommen. Ihre Software wird mit ziemlicher Sicherheit abstürzen. Der Bash-printf hingegen scheint nichts dagegen zu haben.
printf "Eins: %s Zwei: %sn" "Alpha" 777
Wenn dem ganzzahligen Formatbezeichner „% d“ kein Argument gegeben wird, wird Null ausgegeben.
printf "Ganzzahl: %dn"
Bash gibt eine Fehlermeldung aus und printf gibt Null aus, wenn der Integer-Formatbezeichner „% d“ versehentlich eine Zeichenfolgeneingabe erhält.
printf "Ganzzahl: %dn" "Sieben"
Umständliche Symbole können durch Eingabe ihrer Unicode-Nummer erstellt werden, die auch als „Codepunkt“ bezeichnet wird. Der Buchstabe „u“ wird verwendet, um bestimmte Zeichen zu maskieren, gefolgt von ihrem Unicode-Wert.
printf "Das Euro-Symbol: u20ACn"
Um Escape-Sequenzen in Argumentzeichenfolgen unterzubringen, verwenden Sie den Formatbezeichner „% b“ anstelle des Zeichenfolgenformatbezeichners „% s“ in der Formatzeichenfolge.
printf "%s" "u20ACn"
printf "%b" "u20ACn"
Der anfängliche printf-Befehl erkennt die Newline-Escape-Sequenz nicht und verarbeitet den Unicode-Wert nicht. Der Formatbezeichner „% b“ wird im zweiten printf-Befehl verwendet. Das Unicode-Zeichen wird entsprechend behandelt und eine neue Zeile wird angezeigt.
Pferde für Kurse
Möglicherweise müssen Sie nur gelegentlich Text in das Terminalfenster ausgeben. printf ist jedoch das ideale Werkzeug für die Aufgabe, wenn Sie etwas Positionierung und Formatierung anwenden müssen.
printf "%b" "Tha-" "tha-" "tha-" "das ist alles Leute.n"
- So löschen Sie Daten von einem Windows 10- oder Windows 11-Laufwerk
- Wie man einzelne Dateien und Ordner in Git zurücksetzt
- So senden Sie iMessages von einer E-Mail-Adresse anstelle einer Telefonnummer
- So deaktivieren Sie den aktiven Status von Facebook
- So aktivieren Sie Windows 11
- Wie man einen Frosch von einer Kröte unterscheidet