GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-printf-Befehl

Normalerweise verwenden wir beim Schreiben von Bash-Skripten echo auf die Standardausgabe drucken. echo ist ein einfacher Befehl, aber in seinen Fähigkeiten begrenzt.
Um mehr Kontrolle über die Formatierung der Ausgabe zu haben, verwenden Sie printf Befehl.

Der printf Der Befehl formatiert und druckt seine Argumente, ähnlich wie printf() in C Funktion.

printf Befehl #

printf ist eine in Bash und in anderen populären Shells wie Zsh und Ksh eingebaute Shell. Es gibt auch ein eigenständiges /usr/bin/printf binär, aber die Shell-integrierte Version hat Vorrang. Wir werden die in Bash eingebaute Version von printf behandeln .

Die Syntax für printf Befehl lautet wie folgt:

printf [-v var] format [arguments]

Das -v Option teilt printf mit die Ausgabe nicht zu drucken, sondern der Variablen zuzuweisen.

Das format ist eine Zeichenfolge, die drei verschiedene Arten von Objekten enthalten kann:

  • Normale Zeichen, die einfach unverändert in die Ausgabe gedruckt werden.
  • Backslash-escaped Zeichen, die interpretiert und dann ausgegeben werden.
  • Konvertierungsspezifikationen, die das Format beschreiben und durch die Werte der jeweiligen Argumente ersetzt werden, die dem Formatstring folgen.

Der Befehl akzeptiert eine beliebige Anzahl von arguments . Wenn mehr arguments als Formatbezeichner bereitgestellt werden, das format string wird wiederverwendet, um alle Argumente zu verbrauchen. Wenn weniger arguments als Formatbezeichner bereitgestellt werden, werden die zusätzlichen numerischen Formatbezeichner auf den Wert Null gesetzt, während Zeichenkettenformatbezeichner auf Nullzeichenfolge gesetzt werden.

Unten sind einige Punkte zu beachten, wenn Argumente an printf übergeben werden Befehl:

  • Die Shell ersetzt alle Variablen, Platzhalter und Sonderzeichen, bevor sie die Argumente an printf weitergibt Befehl.
  • Bei Verwendung von einfachen Anführungszeichen '' der wörtliche Wert jedes in Anführungszeichen eingeschlossenen Zeichens wird beibehalten. Variablen und Befehle werden nicht erweitert.
printf "Open issues: %s\nClosed issues: %s\n" "34" "65"
Open issues: 34
Closed issues: 65

Die Zeichenfolge Open issues: %s\nClosed issues: %s\n ist das format während „34“ und „65“ Argumente sind. Der Format-String enthält zwei Newline-Zeichen (\n ) und zwei Formatbezeichner (%s ), die durch die Argumente ersetzt werden.

Der printf Befehl fügt kein Zeilenumbruchzeichen hinzu (\n ) am Ende der Zeile.

Backslash-escaped-Zeichen #

Die mit Backslash maskierten Zeichen werden interpretiert, wenn sie in der Formatzeichenfolge oder in einem Argument verwendet werden, das einem %b entspricht Konvertierungsbezeichner. Hier ist eine Liste der gebräuchlichsten Escape-Zeichen:

  • \\ - Zeigt einen umgekehrten Schrägstrich an.
  • \b - Zeigt ein Backspace-Zeichen an.
  • \n - Zeigt eine neue Zeile an.
  • \r - Zeigt einen Wagenrücklauf an.
  • \t - Zeigt einen horizontalen Tab an.
  • \v - Zeigt einen vertikalen Tab an.

Konvertierungsspezifikationen #

Eine Konvertierungsspezifikation hat folgende Form:

%[flags][width][.precision]specifier

Jede Konvertierungsspezifikation beginnt mit dem Prozentzeichen (% ), enthält optionale Modifikatoren und endet mit einem der folgenden Buchstaben, die den Datentyp darstellen (specifier ) des entsprechenden Arguments:aAbcdeEfgGioqsuxX .

Typumwandlungsbezeichner #

Der Typumwandlungs-specifier ist ein Zeichen, das angibt, wie das entsprechende Argument zu interpretieren ist. Dieses Zeichen ist erforderlich und wird nach den optionalen Feldern platziert.

Unten ist eine Liste, die alle Typumwandlungen zeigt und was sie bewirken:

  • %b - Gibt das Argument aus, während Backslash-Escape-Sequenzen erweitert werden.
  • %q - Gibt das Argument in Shell-Anführungszeichen aus, wiederverwendbar als Eingabe.
  • %d , %i - Gibt das Argument als vorzeichenbehaftete Dezimalzahl aus.
  • %u - Gibt das Argument als Dezimalzahl ohne Vorzeichen aus.
  • %o - Gibt das Argument als vorzeichenlose Oktalzahl aus.
  • %x , %X - Gibt das Argument als vorzeichenlose hexadezimale Ganzzahl aus. %x druckt Kleinbuchstaben und %X gibt Großbuchstaben aus.
  • %e , %E - Geben Sie das Argument als Fließkommazahl in Exponentialschreibweise aus. %e druckt Kleinbuchstaben und %E gibt Großbuchstaben aus.
  • %a , %A - Gibt das Argument als Fließkommazahl in hexadezimaler Bruchschreibweise aus. %a druckt Kleinbuchstaben und %A gibt Großbuchstaben aus.
  • %g , %G - Geben Sie das Argument als Fließkommazahl in normaler oder exponentieller Notation aus, je nachdem, was für den angegebenen Wert und die angegebene Genauigkeit besser geeignet ist. %g druckt Kleinbuchstaben und %G gibt Großbuchstaben aus.
  • %c - Gibt das Argument als einzelnes Zeichen aus.
  • %f - Gibt das Argument als Fließkommazahl aus.
  • %s - Gibt das Argument als String aus.
  • %% - Geben Sie einen wörtlichen % aus Symbol.

Eine vorzeichenlose Zahl steht für null und positive Zahlen, während eine vorzeichenbehaftete Zahl für negative, null und positive Zahlen steht.

Der folgende Befehl gibt die Zahl 100 in drei verschiedenen Zahlensystemen aus:

printf "Decimal: %d\nHex: %x\nOctal: %o\n" 100 100 100
Decimal: 100
Hex: 64
Octal: 144

Flags-Direktive #

Flags sind die ersten optionalen Modifikatoren und werden verwendet, um die Ausrichtung, führende Nullen, Präfixe usw. festzulegen.

Hier sind die häufigsten:

  • - - Richten Sie den gedruckten Text innerhalb des Felds linksbündig aus. Standardmäßig ist der Text rechtsbündig.
  • + - Stellen Sie den Nummern ein + voran oder - Zeichen. Standardmäßig wird nur negativen Zahlen ein Minuszeichen vorangestellt.
  • 0 - Füllt Zahlen mit führenden Nullen anstelle von Leerzeichen auf.
  • leer - Stellen Sie positiven Zahlen ein Leerzeichen und negativen Zahlen ein Minus voran (- ).
  • # - Ein alternatives Format für Zahlen.

Breite-Direktive #

Die width Direktive file wird nach allen Flag-Zeichen platziert und gibt die Mindestanzahl von Zeichen an, die die Konvertierung ergeben soll.

Wenn die ausgegebene Textbreite kleiner als die angegebene Breite ist, wird sie mit Leerzeichen aufgefüllt. Die Breite kann als nicht negative Dezimalzahl oder als Sternchen (* ).

Hier ist ein Beispiel:

printf "%20s %d\n" Mark 305

%20s bedeutet, dass das Feld mindestens 20 Zeichen lang ist. Leerzeichen werden vor dem Text eingefügt, da die Ausgabe standardmäßig rechtsbündig erfolgt. Um den Text linksbündig auszurichten, verwenden Sie den - Flag (%-20s ).

      Mark 305

Wenn ein Sternchen (* ) wird als width verwendet Direktive, dann wird die Breite des Konvertierungsfeldes durch ein width-Argument festgelegt, das dem zu formatierenden Argument vorausgeht.

Im folgenden Beispiel setzen wir die Breite auf 10:

printf "%0*d" 10 5

0 ist ein Flag, das die Zahl mit führenden Nullen anstelle von Leerzeichen auffüllt. Der Ausgabetext hat mindestens 10 Zeichen:

0000000005

Präzisionsrichtlinie #

Die .precision Modifikator besteht aus einem Punkt (. ) gefolgt von einer positiven Ganzzahl oder einem Sternchen (* ), die je nach Bezeichnertyp die Anzahl der Zeichenfolgen oder Ziffern oder die Anzahl der zu druckenden Dezimalstellen festlegt.

Die Genauigkeit hat folgende Auswirkung:

  • Wenn der Konvertierungstyp eine Ganzzahl ist, gibt die Genauigkeit die Mindestanzahl der zu druckenden Stellen an. Wenn die Anzahl der Ziffern im Argument kleiner als die Genauigkeit ist, werden führende Nullen ausgegeben.
  • Wenn der Konvertierungstyp ein Gleitkommatyp ist, gibt die Genauigkeit die Anzahl der Ziffern an, die auf das Dezimalkommazeichen folgen. Die Standardgenauigkeit ist 6.
  • Wenn der Konvertierungstyp ein String ist, gibt die Genauigkeit die maximale Anzahl der zu druckenden Zeichen an. Wenn die Anzahl der Zeichen im Argument größer als die Genauigkeit ist, werden die überzähligen Zeichen abgeschnitten.

Hier ist ein Beispiel, das zeigt, wie man eine Fließkommazahl auf 3 Dezimalstellen rundet:

printf "%.3f" 1.61803398
1.618

Wenn die Genauigkeit auf ein Sternchen gesetzt ist (* ), wird sein Wert durch das Genauigkeitsargument festgelegt, das dem zu formatierenden Argument vorausgeht.

printf "%.*f" 3 1.61803398
1.618

Schlussfolgerung #

Der printf Der Befehl nimmt ein Format und Argumente und gibt einen formatierten Text aus.

Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.


Linux
  1. Linux-Befehlsgrundlagen:printf

  2. printf:Befehl nicht gefunden

  3. printf-Befehlsbeispiele unter Linux

  4. apachectl von bash starten

  5. Bash-Exportbefehl

Verlaufsbefehl in Linux (Bash-Verlauf)

Bash Exit-Befehl und Exit-Codes

Bash-Scripting – Printf-Befehl mit Beispielen erklärt

Bash-Skripting (II)

Bash-Scripting(III)

Verwenden des Bash-printf-Befehls zum Drucken formatierter Ausgaben