English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ShellprintfBefehl

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

printfEscapeSequenz

SequenzErklärung
\aWarndatei,normalerweisederBELZeichenvonASCII
\bRückwärts
\cUnterdrückung(Nichtanzeige)jeglicherEndlingsZeicheninAusgabeergebnissen(nurunter%bFormatanweisungsanzeigersteuerterParameterzeichenfolgen gültig),undjeglicherverbleibenderZeicheninParameter、jeglicherfolgendenParameterundjeglicherverbleibenderZeicheninFormatzeichenfolgenwerdenignoriert
\fSeitenumbrechen(formfeed)
\nZeilenumbruch
\rReturn(Zurückzug)
\tHorizontaltabulator
\vVertikaltabulator
\\einbuchstabenlicherBackslashZeichen
\ddddarstellt1bis3octalWertZeichen. Nur in Formatzeichenfolgen gültig
\0ddddarstellt1bis3octalWertZeichen
$ 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