In diesem Artikel werde ich die grundlegende Verwendung von Bash printf erklären Befehl mit Beispielen in Linux. Am Ende dieses Artikels werden Sie mit der Verwendung des printf-Befehls in Bash-Shell-Scripting vertraut sein.
Bash printf-Befehl
Bash bietet zwei Arten von Befehlen, die zum Drucken Ihrer Ausgabe auf dem Terminal verwendet werden können. Einer ist das Echo Befehl, der meistens für diesen Zweck verwendet wird. Der zweite ist printf Befehl.
Printf
ähnelt der printf-Funktion in C Sprache, aber mit eigenen Funktionen. Der Hauptunterschied zwischen echo
und printf
Befehl ist dieser printf
bietet Formatierung und zusätzliche Funktionalitäten gegenüber dem echo
Befehl.
Wenn Sie das echo
nicht verwendet haben befehlen, haben wir einen ausführlichen Artikel darüber, den Sie sich ansehen sollten.
- Bash-Echo-Befehl mit Beispielen in Linux erklärt
Printf
ist eine eingebaute Shell, aber Sie können auch einen externen Befehl für printf
finden . Builtin hat Vorrang vor externen Befehlen. Sie können diese Informationen abrufen, indem Sie type
Befehl wie unten gezeigt.
$ type -a printf printf is a shell builtin printf is /usr/bin/printf printf is /bin/printf
Weitere Einzelheiten zu type
Befehl finden Sie in der folgenden Anleitung:
- Das Type-Command-Tutorial mit Beispielen für Anfänger
Wenn Sie die externe Version von printf
ausführen möchten , müssen Sie auf den vollständigen Verzeichnispfad zeigen, in dem sich die Binärdatei befindet.
$ printf "Hello World\n" # SHELL BUILTIN
$ /usr/bin/printf "Hello World\n" # EXTERNAL VERSION OF PRINTF
Bash printf-Hilfe anzeigen
Wie ich im vorherigen Abschnitt erwähnt habe, printf
ist bash eingebaut. Sie müssen die bash
öffnen Manpage und navigieren Sie zu printf
Abschnitt.
$ man bash
/printf → presss
Sie können auch den folgenden Befehl ausführen, der den Hilfeabschnitt von printf
anzeigt aus der bash
Manpage.
$ man bash | less --pattern='^ *printf +['
Grundform des printf-Befehls
In den Beispielen werde ich den printf
vergleichen mit echo
Befehl, die Gemeinsamkeit zu verstehen.
Unten ist das Format für printf
Befehl:
printf [-v var] format [arguments]
Argumente sollten an printf
übergeben werden Andernfalls schlägt es fehl, wie im folgenden Bild gezeigt.
$ printf
$ echo $?
Übergeben Sie ein Argument und führen Sie printf
aus erneut befehlen. Aus dem folgenden Beispiel können Sie sehen, dass ich \n hinzugefügt habe, was das Zeilenumbruchzeichen ist. Standardmäßig printf
fügt keine neue Zeile wie echo
hinzu Befehl, also müssen Sie \n
hinzufügen .
$ printf "Linux is fun to work with" # WITHOUT NEW LINE
$ printf "Linux is fun to work with\n" # WITH NEW LINE
Variablen und Befehlsinterpretation
Innerhalb von printf
können Sie beliebige Variablen einschließen oder Befehle ausführen Erklärung. Dieses Verhalten ähnelt dem echo
Befehl.
$ VAR1="Linux"
$ printf "$VAR1 is fun to work with\n"
Empfohlene Lektüre:
- Bash-Scripting – Variablen mit Beispielen erklärt
Verhalten zwischen einfachen und doppelten Anführungszeichen
Wenn Sie Ihre Argumente in einfache Anführungszeichen setzen, werden die Variable und der Befehl als einfacher Text behandelt. Dies ist das gleiche Verhalten in echo
Befehl auch. Sie müssen die Argumente in doppelte Anführungszeichen setzen, wenn Sie möchten, dass die Variable und der Befehl erweitert werden.
$ printf '$VAR1 is fun to work with\n'
$ printf 'Today date = $(date)\n'
Wenn Sie Argumente ohne Anführungszeichen übergeben, printf
betrachtet nur das erste Wort als Argument und gibt es aus. Verwenden Sie also Anführungszeichen um printf
ist erforderlich.
$ printf Today date = $(date)\n
Umleitung und Weiterleitung der Ausgabe
Standardmäßig printf
sendet die Ausgaben an stdout (Terminal). Sie können die Ausgabe mit dem Umleitungsoperator in eine Datei umleiten oder kombinieren Sie ihn mit dem Pipe-Operator zur Weiterverarbeitung.
# PRINT TO STDOUT $ printf "Today date = $(date)\n"
# REDIRECT TO A FILE $ printf "Today date = $(date)\n" > /tmp/tdy.txt $ cat /tmp/tdy.txt
# PIPE $ printf "Today date = $(date)\n" | grep -i -o IST
Verwandte Lektüre:
- Bash-Umleitung mit Beispielen erklärt
Ausgang einer Variablen zuweisen
Manchmal möchten Sie vielleicht den printf
speichern in eine Variable ausgeben und später für eine Verarbeitung verwenden. Normalerweise führen Sie printf
aus eingeschlossen in eckige Klammern, die den Befehl ausführen und die Ausgabe einer Variablen zuweisen.
$ ZONE=$(printf "Today date = $(date)\n" | grep -i -o IST)
$ printf $ZONE
Alternativ können Sie auch das -v
verwenden Flag zusammen mit printf
um die Ausgabe in einer Variablen zu speichern. Sie müssen den Variablennamen nach -v
übergeben Flagge.
$ printf -v TIME "Today date = $(date)\n" $ echo $TIME
Mehrzeilige printf-Anweisung
Wenn mehr als eine Zeile gedruckt werden soll, können Sie den Text in doppelte Anführungszeichen setzen. Wenn Sie eine große Zeile haben, die als einzelne Zeile gedruckt werden soll, und die Zeile zur besseren Lesbarkeit des Codes mehrzeilig schreiben möchten, können Sie am Ende jeder Zeile einen umgekehrten Schrägstrich verwenden, an dem die nächste Zeile als Fortsetzung zur vorherigen Zeile.
$ printf "\n I am running PoP_OS
It is a great OS
With Great features\n"
$ printf "I am running pop_os \
It is a great OS \
With Great features\n"
Backslash-escaped-Zeichen
Sie können die folgenden Backslash-escaped Zeichen in printf
verwenden .
- Zeilenumbruchzeichen (\n)
- Horizontaler Tabulator (\t) und vertikaler Tabulator (\v)
- Rücktaste (\b)
- Wagenrücklauf (\r)
Lassen Sie uns nacheinander mit Beispielen diskutieren.
Zeilenumbruchzeichen (\n)
Wir haben bereits etwas über Zeilenumbrüche gesehen (\n
) in allen vorherigen Abschnitten. Newline-Zeichen (\n
) fügt eine neue Zeile hinzu.
$ printf "Today date = $(date)\n"
Horizontaler Tabulator (\t) und vertikaler Tabulator (\v)
Horizontale und vertikale Tabulatorzeichen werden verwendet, um Tabulatoren zu Ihrem printf
hinzuzufügen Argumente.
$ printf "Today date \t $(date)\n" # HORIZONTAL TAB
$ printf "Today date \v $(date)\n" # VERTICAL TAB
Backspace-Zeichen (\b)
Backspace-Zeichen (\b
) entfernt einen Buchstaben. Dies ist wie das Drücken der Rücktaste auf unserer Tastatur.
$ printf "It's a rain\by day..\n"
Wagenrücklauf (\r)
Der Cursor wird beim Carriage Return (\r
) wird genutzt. Was auch immer nach \r
kommt ersetzt die Zeichen von der ersten Position.
$ printf "It's a rain\by\r day..\n"
Escape-Backslash-Zeichen (\)
Wenn Sie Sonderzeichen maskieren möchten (\n
, \t
, \v
, \b
, \r
) und behandeln Sie es wie eine Zeichenfolge, dann stellen Sie ihm doppelte Backslashes voran (\\
).
$ printf "It's a rain\\by\\r day..\n"
Was auch immer Sie bisher gesehen haben, Sie finden die gleichen Operationen im echo
Befehl auch. Wenn Sie das echo
bereits kennen Befehl, bis zu diesem Zeitpunkt hätten Sie sich mit dem printf
sehr vertraut gemacht Befehl auch.
Printf-Formatbezeichner
Formatbezeichner sind eine Möglichkeit, Werte in printf
zu ersetzen anstatt den Wert in printf
fest zu codieren . Es gibt viele Buchstaben, die für die Substitution verwendet werden, und jeder Buchstabe steht für einen bestimmten Datentyp. Wenn Sie einen Bezeichner verwenden, müssen Sie ihm ein %
voranstellen Symbol. Sehen wir uns einige der häufig verwendeten Formatbezeichner an.
Stringspezifizierer (%s)
Wenn Sie Zeichenfolgen in printf
einfügen möchten , müssen Sie %s
verwenden . Schauen Sie sich das folgende Beispiel an. Ich habe ein printf
-Anweisung und ich möchte den Wert "United" ersetzen innerhalb des printf
. Also %s
wird verwendet, was ein String-Bezeichner ist und wenn Sie den Befehl ausführen, der Wert "united" wird anstelle von %s
eingesetzt .
$ printf "++ Manchester %s has a strong lineup this season" "United"
Sie können so viele Substitutionsargumente übergeben, wie Sie möchten, und Sie müssen die gleiche Anzahl von Spezifizierern innerhalb des Arguments verwenden.
$ printf "++ %s %s has a strong lineup this %s" "Manchester" "United" "season"
Was, wenn weniger Spezifizierer und mehr Argumente verwendet werden?
Schauen Sie sich das folgende Beispiel an. Ich habe am Anfang nur einen Bezeichner verwendet und drei zu ersetzende Argumente (Strings) übergeben. Der Weg printf
Wenn dies behandelt wird, beginnt es mit dem Ersetzen des ersten Arguments im ersten Bezeichner, und das nächste Argument wird erneut an den ersten Bezeichner übergeben, da es keine anderen Bezeichner gibt. Auf diese Weise treten drei Ersetzungen auf, die eigentlich nicht korrekt sind und das gewünschte Ergebnis liefern.
$ printf "++ %s United has a strong lineup this Season\n" "Manchester" "United" "season"
Es gibt einige Anwendungsfälle, in denen dieses Verhalten sinnvoll ist. Schauen Sie sich das folgende Beispiel an. Ich möchte eine Willkommensnachricht für einige Spieler drucken und ihre Namen als Argumente übergeben. Normalerweise können Sie die Namensliste in einem Array speichern und das Array durchlaufen und die Nachricht drucken. Dies ist jedoch ein effektiver Weg, um das Ergebnis zu erzielen, indem die Verwendung von Schleifen vermieden wird.
$ printf "++ Welcome %s to manchester united\n" "Ronaldo" "Varane" "Jadon Sancho\n" ++ Welcome Ronaldo to manchester united ++ Welcome Varane to manchester united ++ Welcome Jadon Sancho to manchester united
Dezimalzahl mit Vorzeichen (%d) und Dezimalzahl ohne Vorzeichen (%u)
Verwenden Sie %d
, um ganze Zahlen mit Singen zu ersetzen .
$ printf ">> Welcome %s to manchester united - You get shirt number - %d\n" "Ronaldo" 7 "Varane" 19 "Jadon Sancho" 25
Um Ganzzahlen ohne Vorzeichen zu ersetzen, verwenden Sie %u
.
$ printf "UNSIGNED INTEGER = %u\n" 10
Wenn Sie versuchen, einen anderen Datentyp als Integer zu ersetzen, erhalten Sie eine Fehlermeldung.
$ printf ">> Ronaldo gets no %d\n" seven
Gleitkommazahl (%f)
Um Fließkommazahlen zu ersetzen, verwenden Sie %f
.
$ printf "Integer 100 to floating-point %f\n" 100
Backslash-Escape-Sequenz interpretieren
Sie können Backslash-Escape-Sequenzen als Argumente übergeben und %b
verwenden die die Backslash-Escape-Sequenz interpretiert und erweitert.
$ printf "Welcome to %b Manchester united %b" "\v" "\n"
Printf-Konvertierungsanweisungen
Es gibt optionale Konvertierungsmodifikatoren, die zum Formatieren Ihres printf
verwendet werden können Ausgänge.
%[flags][width][.precision]specifier
Breitenmodifikator
Der Breitenmodifikator bestimmt die Mindestanzahl von Zeichen in der Konvertierung. Wenn die Anzahl der Zeichen geringer ist, werden Leerzeichen wie unten gezeigt vorangestellt.
$ printf "%10s\n" "Ronaldo"
Wenn Sie sich das obige Bild ansehen, ist der Spezifizierer (Ronaldo) 7 Zeichen und ich habe die Breite auf 10 festgelegt . In diesem Fall werden Leerzeichen hinzugefügt, um die Breite 10 auszurichten .
Sie können auch Flag-Modifikatoren verwenden, um die Ausrichtung zu rechtfertigen, oder Nullen anstelle von Leerzeichen hinzufügen. Wenn die Ausgabe beispielsweise linksbündig ausgerichtet werden muss, können Sie einen Bindestrich hinzufügen (-
) Flag-Modifizierer.
$ printf "%-10s\n" "Ronaldo"
Bei Integer- und Fließkommawerten können Sie das Leerzeichen durch Nullen ersetzen durch Hinzufügen eines Flag-Modifizierers Null (0).
$ printf "%010d \n" 7
Präzisionsmodifikator
Dies ist ein optionaler Parameter, der verwendet werden kann, um die Anzahl der zu druckenden Zeichenfolgen, Ganzzahlen und Gleitkommapositionen zu bestimmen. Sie müssen Punkt(.) verwenden gefolgt von der Ganzzahl, um die Anzahl der zu druckenden Positionen festzulegen.
Schauen Sie sich das folgende Beispiel an. Ich verwende einen Zeichenfolgenbezeichner und setze den Genauigkeitsmodifikator auf vier.
$ printf "%.7s\n" "Ronaldo has joined Manu"
Sternchen (*
) können anstelle von ganzzahligen Präzisionswerten übergeben werden. Sternchen akzeptieren ein Argument für die Genauigkeit, anstatt den Genauigkeitswert fest zu codieren.
$ printf "%.*s\n" 7 "Ronaldo has joined Manu"
Schlussfolgerung
Wir haben in diesem Artikel eine ganze Reihe von Informationen über den Bash-Befehl printf behandelt. Um den printf
zu verwenden Üben Sie einfach alle im Artikel angegebenen Beispiele. Printf ist viel leistungsfähiger in der Formatierung als die Beispiele, die ich in diesem Artikel gezeigt habe. Wenn Sie mit den Grundlagen vertraut sind, können Sie je nach Anwendungsfall printf
verwenden effizient.
Verwandte Lektüre:
- Bash-Skripting – Indiziertes Array mit Beispielen erklärt
- Bash-Skripting – Assoziatives Array mit Beispielen erklärt
- Bash-Skripting – While- und Until-Schleife mit Beispielen erklärt
- Bash-Skripting – For-Schleife mit Beispielen erklärt
- Bash-Scripting – Funktionen mit Beispielen erklärt
- Bash Heredoc-Tutorial für Anfänger