
Textformatierung ist ein interessantes Thema, vor allem wenn es um bash geht. Obwohl es viele Tools zum Formatieren von Text gibt, printf ist einzigartig und universell. Erfahren Sie alles über printf in Bash, um Ihren Text richtig zu formatieren!!
Verwenden von druckenf in bash
C ++ und andere Entwickler kennen printf bereits als großartige Möglichkeit, Textausgaben beim Programmieren zu formatieren. Es ist von großem Vorteil, dasselbe Tool in Bash zur Verfügung zu haben. printf ermöglicht Ihnen die Steuerung und Produktion komplexer Ausgabeformate, ganz nach Wunsch. Die printf-Manpage etabliert printf als Werkzeug zum Drucken und Formatieren von Daten, das ist genau das was es ist und tut.
Als Beispiel, Möchten Sie eine Dezimalzahl mit einer genauen Länge von . drucken? 3 Bytes (die Charaktere / Zahlen) für den ganzen teil (der Teil vor dem Komma oder Komma, je nachdem, wo auf der Welt du lebst und wo dein Standort ist) Ja 2 Bytes (die Charaktere / Zahlen) für den Dezimalteil der Zahl? Kein Problem, printf kann das und vieles mehr. Sie können den Text auch an eine bestimmte Spalte auf dem Bildschirm senden, etc.
Obwohl die Syntax von printf, für einen neuen Entwickler, kann verwirrend oder komplex erscheinen, es ist eigentlich ganz einfach. Es gibt nur einen begrenzten Satz von Zeichen im Worker-Format, die in einer printf-Ausgabedefinition verwendet werden können. Schauen wir uns diese zuerst an..
Syntax: druckenf
Das sind die am häufigsten verwendeten printf-Syntax Redewendungen im Zahlenformat:
%d or %i a signed decimal integer %u an unsigned decimal integer %f a decimal floating point number %e a scientific notation number %g will let printf use %e or %f, whichever is shorter %c a single character %s a string of characters %% zum wörtlichen '%'
Dann, Es ist gut zu wissen, wie man bestimmte Optionen für die Verknüpfung mit diesen Formatierungsidiomen angibt. Das Format zum Angeben von Optionen für diese ist wie folgt:
%[Flagge(so)][Breite][.Präzision][Länge]number_formatting_idiom
Beispiele: druckenf
Dann, als Beispiel, einen Float mit einer Breite von 3 und eine Genauigkeit von 2, muss angeben:
%3.2f
Sehen wir uns ein Beispiel an:
druckenf "%3.2Fn" "100.304"
Einfach und unkompliziert. Beachten Sie, dass wir eine Variable anstelle von "100.304"
:
VAR1=100.304
printf "%3.2Fn" ${VAR1}
Beachten Sie auch, wie wir eine neue Zeile mit einem n
neue Zeilenfolge. Für eine vollständige Liste der verfügbaren interpretierten Sequenzen, sehen man printf
. Die häufigsten sind n
für neue Linie, t
für Tab und für einen umgekehrten Schrägstrich.
Im Format der alternativen oben haben wir auch gesehen, wie wir Flags spezifizieren können. Es gibt eine begrenzte Anzahl von gemeinsamen Flaggen:
- Linksbündiger Text (rechtsbündig ist die Standardeinstellung)
+ Erzwingt die Verwendung eines Zeichens, even if positive
' ' A space is inserted if no sign will be used
0 Linkes Auffüllen der Zahl mit Nullen anstelle von Leerzeichen, wenn Auffüllung angegeben wird
A) Ja, als Beispiel, wir können:
VAR1=-100.304
VAR2=100.304
printf "% 3.2ftt%+3,2fn" ${VAR1} ${VAR2}
Hier verwenden wir zwei Variablen und trennen die Ausgabe durch zwei Tabs mit zwei t
Tabs-Sequenzen. Wir fügen auch ein Leerzeichen ein (wie eine flagge) Komm herein %
und Definition der Breite. Dies führte zu der negativen Zahl in VAR1
mit negativem Vorzeichen drucken. Wenn die Zahl positiv gewesen wäre, es wäre kein Schild gedruckt worden und, stattdessen, ein Leerzeichen wäre an der gleichen Stelle gedruckt worden.
Zum Abschluss verwenden wir die +
Flagge und, Genau genommen, unsere nummer wird mit a . ausgegeben +
Vorzeichen unabhängig davon, dass die Zahl bereits positiv ist und, so, (regelmäßig) Es wird kein Schild gedruckt.
Dann, Wie können wir sicherstellen, dass wir führende Nullen oder Leerzeichen haben?, während es immer noch eine bestimmte Länge hat? Zuerst, wir müssen sicherstellen, dass die Breite unserer Definition länger ist als der Variableninhalt, und zweitens können wir die 0
Flag, um führende Nullen anzuzeigen:
VAR1=-100.304
VAR2=100.304
printf "% 13.2fn3,2fn,2f" ${VAR1} ${VAR2} ${VAR1}
In diesem Beispiel, wir drucken 3 Linien, zweimal getrennt durch die n
neue Zeilenfolge. Wir bemerken sofort, dass wenn am Ende der Ausgabe keine neue Zeile steht, unser Bash-Indikator kehrt gezielt an das Ende unserer dritten Ausstiegslinie zurück.
Dies ist im interaktiven Modus auf dem Terminal möglicherweise kein schönes oder nützliches Format, aber aus einem Skript (denken, als Beispiel, in einer sequenz wie 1...2...3...
die Schritt für Schritt auf dem Bildschirm erstellt wird, während Sie den Code durchgehen) Das kann sehr hilfreich sein.
Auf der zweiten Startlinie, wir nehmen das 0
Flag, um anzuzeigen, dass wir führende Nullen für verwenden möchten VAR2
. Genau genommen, die Ausgabe wirft führende Nullen, bis zur eingestellten Länge.
Auf der ersten Startlinie, wir fügen in der dritten Zeile der Ausgabe ein Leerzeichen ein (beide drucken die VAR1
Variable) wir haben nicht. Die Ausgabe ist die gleiche, Das ist die einzige Kuriosität, die mir bei der Arbeit aufgefallen ist printf
; man würde erwarten, dass es ein zusätzliches Zeichen gibt, da printf-Space-Flag-Definition. Dies bleibt auch dann gleich, wenn wir führende Nullen verwenden. Es bleibt auch gleich, wenn die Länge nicht angegeben ist.
Deshalb, die Verwendbarkeit des Space Flags kann in einigen Fällen eingeschränkt sein (negative Zahlen). Dies ist bei positiven Zahlen nicht der Fall:
VAR1=100.304
printf "% fnn" ${VAR1} ${VAR1}
Unter diesen Umständen (positive Zahlen), das Weltraumflagge funktioniert wie erwartet, und im ersten Fall wird ein zusätzliches Leerzeichen eingefügt VAR1
Produktion.
Fazit
Die Verwendung von printf innerhalb von Bash-Skripten oder auf der Befehlszeile kann zu einer klaren, gut etablierten Ausgabe führen. Wenn Sie die Variablen richtig skalieren (und vielleicht die Reichweite, überprüfe sie auf jeden Fall), mit druckenf gibt Ihnen eine flexible Methode zum Formatieren der Ausgabe (und das Gesamtlayout des Bildschirms für größere Anwendungen) wie du willst.
In diesem Beitrag, Wir diskutieren häufig verwendete Redewendungen für Zahlenformate, wie man die Breite von Integer und Dezimalteil von Zahlen einstellt, und wir überprüfen die am häufigsten verwendeten Flaggen in printf. Viel Spaß beim Drucken gut formatierter Daten mit printf!