English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Im vorherigen Kapitel haben wir den Shell-Befehl echo gelernt, in diesem Kapitel lernen wir den anderen Ausgabebefehl von Shell, printf.
Der Befehl printf imitiert die Funktion printf() aus der C-Programmbibliothek (library).
printf wird durch den POSIX-Standard definiert, daher hat ein Skript, das printf verwendet, eine bessere Portabilität als eines, das echo verwendet.
printf verwendet Referenztexte oder durch Leerzeichen getrennte Parameter und ermöglicht die Verwendung von Formatierungszeichenfolgen außen. Es kann auch die Breite der Zeichenfolge und die Ausrichtung linksbündig oder rechtsbündig festgelegt werden. Standardmäßig fügt printf nicht wie echo automatisch einen Zeilenumbruch hinzu, wir können ihn manuell hinzufügen.
Syntax des printf-Befehls:
printf format-string [arguments...]
Parameterbeschreibung:
format-string: als Formatsteuerungszeichen
arguments: als Parameterliste.
$ echo "Hallo, Shell" Hallo, Shell $ printf "Hallo, Shell\n" Hallo, Shell $
Nun werde ich ein Skript verwenden, um die starke Funktion von printf zu demonstrieren:
#!/bin/bash # author:Grundlagen教程网 # url:de.oldtoolbag.com printf "%%-10s %%-8s %%-4s\n" Name Geschlecht Gewichtkg printf "%%-10s %%-8s %%-4.2f\n" Guo Jing Mann 66.1234 printf "%%-10s %%-8s %%-4.2f\n" Yang Guo Mann 48.6543 printf "%%-10s %%-8s %%-4.2f\n" Guo Fu Frau 47.9876
Führen Sie das Skript aus und die Ergebnisse sind wie folgt gezeigt:
Name Geschlecht Gewichtkg Guo Jing Mann 66.12 Yang Guo Mann 48.65 Guo Fu Frau 47.99
%s %%c %%d %%f sind Format-Ersatzsymbole,%%s ein String ausgegeben wird,%%d ausgegebene Ganzzahl,%%c ein Zeichen ausgegeben wird%%f ausgegebene reelle Zahl, in Dezimalform ausgegeben.
%-10s weist auf eine Breite von 10 Buchstaben (- linksbündig, ohne dann rechtsbündig), jeder Zeichen wird angezeigt in 10 Buchstabenbreite Zeichen, wenn weniger, wird automatisch mit Leerzeichen aufgefüllt, wenn mehr, wird der gesamte Inhalt angezeigt.
%-4.2f formatiert als Dezimalzahl, wobei .2 behalten2kleinen Dezimalstellen.
#!/bin/bash # author:Grundlagen教程网 # url:de.oldtoolbag.com # format-string ist in Anführungszeichen printf "%%d %%s\n" 1 "abc" # Single- und Doublequotes haben die gleiche Wirkung printf '%d %%s\n' 1 "abc" # Auch ohne Anführungszeichen kann ausgegeben werden printf %%s abcdef # Wenn nur ein Format angegeben ist, werden die zusätzlichen Parameter dennoch nach diesem Format ausgegeben, format-string wird wiederverwendet printf %%s abc def printf "%%s\n" abc def printf "%%s %%s %%s\n" a b c d e f g h i j # Wenn keine arguments vorhanden sind, wird %%s durch NULL ersetzt und %%d durch 0 ersetzt printf "%%s %%d \n"
Führen Sie das Skript aus und die Ergebnisse sind wie folgt gezeigt:
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j und0
Sequenz | Erklärung |
---|---|
\a | Warndatei,normalerweisederBELZeichenvonASCII |
\b | Rückwärts |
\c | Unterdrückung(Nichtanzeige)jeglicherEndlingsZeicheninAusgabeergebnissen(nurunter%bFormatanweisungsanzeigersteuerterParameterzeichenfolgen gültig),undjeglicherverbleibenderZeicheninParameter、jeglicherfolgendenParameterundjeglicherverbleibenderZeicheninFormatzeichenfolgenwerdenignoriert |
\f | Seitenumbrechen(formfeed) |
\n | Zeilenumbruch |
\r | Return(Zurückzug) |
\t | Horizontaltabulator |
\v | Vertikaltabulator |
\\ | einbuchstabenlicherBackslashZeichen |
\ddd | darstellt1bis3octalWertZeichen. Nur in Formatzeichenfolgen gültig |
\0ddd | darstellt1bis3octalWertZeichen |
$ printf "a string, no processing:<%s>\n" "A\nB" a string, no processing:<A\nB> $ printf "a string, no processing:<%b>\n" "A\nB" a string, no processing:<A B> $ printf "de.oldtoolbag.com \a" de.oldtoolbag.com $ #nicht umbruch