Heim Lernen So verwenden Sie den Bash-printf-Befehl unter Linux

So verwenden Sie den Bash-printf-Befehl unter Linux

durch Frank
Veröffentlicht: Zuletzt aktualisiert am

Einfü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

Verwendung von echo und printf mit nicht zitierten Wörtern

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"

Verwendung von echo und printf mit Wörtern in Anführungszeichen

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"

Verwenden von echo und printf mit Wörtern in Anführungszeichen und dem Zeilenumbruchzeichen

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"

Verwenden von zwei printfs zum Erstellen einer einzelnen Textzeile

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"

Verwenden des Wagenrücklaufzeichens, um zum Anfang der Zeile zurückzukehren

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"

Escape-Zeichen, damit sie wörtlich behandelt werden

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"

Verwendung von printf mit einer Umgebungsvariablen

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"

Zeigen, dass printf "zu viele" Argumente akzeptiert

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

Verwenden von printf zum Drucken von numerischen Werten in verschiedenen Basisnotationen

Lassen Sie es uns ein wenig reduzieren, um das Beispiel weniger überladen zu machen.

printf "Hex: %xn" 15

Drucken eines Hexadezimalwerts

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

Drucken eines Hexadezimalwerts in Großbuchstaben in einem Feld mit einer Breite von 2 Zeichen

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

Drucken eines Hexadezimalwerts in Großbuchstaben in einem Feld mit einer Breite von 2 Zeichen, das mit Nullen aufgefüllt ist

Mit dem Genauigkeitsbezeichner können Sie angeben, wie viele Dezimalstellen in der Ausgabe enthalten sein sollen.

printf "Floating point: %08.3fn" 9.243546

Verwenden von Breiten- und Genauigkeitsmodifikatoren mit einer Gleitkommazahl

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

Breiten- und Präzisionsmodifikatoren verwenden, um eine ordentliche Tabelle zu erstellen

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

Verwenden des Breitenmodifikators mit Zeichenfolgen

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

Verwenden eines linksbündigen Breitenbezeichners mit Zeichenfolgen

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"

Verwenden des Genauigkeitsmodifikators, um die Anzahl der Zeichen zu begrenzen, die von einer Zeichenfolge gedruckt werden

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"

Übergabe des Breitenbezeichners als Argument an printf

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))

Drucken der Summe zweier Zahlen

Die Anzahl der Ordner im aktuellen Arbeitsverzeichnis wird mit diesem Befehl gedruckt:

printf "Es gibt %d Verzeichnissen" $(ls -d */ | wc -l)

Verzeichnisse mit printf zählen

Der Befehl printf gibt eine Zeichenfolge aus, die von einem anderen Programm zurückgegeben wurde.

printf "Aktueller Benutzer: %sn" $(whoami)

Drucken der Ausgabe eines anderen Befehls

Wenn der Zeichenfolgenformatbezeichner „Prozent s“ nicht mit einem Argument angegeben wird, gibt printf null zurück.

printf "Eins: %s Zwei: %sn" "Alpha"

Wie printf mit fehlenden String-Argumenten umgeht

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

Wie printf Ganzzahlen stillschweigend als Zeichenfolgenwerte akzeptiert

Wenn dem ganzzahligen Formatbezeichner „% d“ kein Argument gegeben wird, wird Null ausgegeben.

printf "Ganzzahl: %dn"

Wie printf mit fehlenden Integer-Argumenten umgeht

Bash gibt eine Fehlermeldung aus und printf gibt Null aus, wenn der Integer-Formatbezeichner „% d“ versehentlich eine Zeichenfolgeneingabe erhält.

printf "Ganzzahl: %dn" "Sieben"

Wie printf Strings behandelt, die anstelle von Integer-Argumenten bereitgestellt werden

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"

Drucken eines maskierten Unicode-Werts

Um Escape-Sequenzen in Argumentzeichenfolgen unterzubringen, verwenden Sie den Formatbezeichner „% b“ anstelle des Zeichenfolgenformatbezeichners „% s“ in der Formatzeichenfolge.

printf "%s" "u20ACn"
printf "%b" "u20ACn"

Verwendung des %b-Formatbezeichners zur Handhabung von Escape-Sequenzen in String-Argumenten

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"

Sie können auch mögen

Navhow hat es sich zur Aufgabe gemacht, Menschen auf der ganzen Welt beizubringen, wie man alles macht.

 

Abonnieren

Der beste Ratgeber-Newsletter überall

©2022 Navhow, Alle Rechte vorbehalten