Der Befehl printf gibt formatierten Text auf der Standardausgabe aus. Im Gegensatz zu echo bietet er volle Kontrolle über die Ausgabeformatierung durch Platzhalter und Formatierungsangaben.
Syntax
printf [-v VARIABLE] FORMAT [ARGUMENTE]...
FORMAT- Eine Zeichenkette mit Text, Escape-Sequenzen und Formatspezifikationen.ARGUMENTE- Die Werte, die in die Formatspezifikationen eingesetzt werden.-v VARIABLE- Speichert die Ausgabe in einer Variablen statt sie auszugeben.
Grundlegende Verwendung
Ein einfaches Beispiel mit Textplatzhaltern:
printf "Name: %s, Alter: %d\n" "Anna" 28
Ausgabe:
Name: Anna, Alter: 28
Der Platzhalter %s steht für eine Zeichenkette (String), %d für eine Ganzzahl (Dezimal). Das \n erzeugt einen Zeilenumbruch.
Wichtig: Im Gegensatz zu echo fügt printf keinen automatischen Zeilenumbruch am Ende ein. Du musst \n explizit angeben.
Formatspezifikationen
Jede Formatspezifikation beginnt mit % und endet mit einem Typzeichen:
| Zeichen | Bedeutung |
|---|---|
%s | Zeichenkette (String) |
%d, %i | Ganzzahl (Dezimal) |
%f | Fließkommazahl |
%x, %X | Hexadezimalzahl (klein/groß) |
%o | Oktalzahl |
%c | Einzelnes Zeichen |
%% | Literales Prozentzeichen |
Zahlen in verschiedenen Formaten
printf "Dezimal: %d, Hex: %x, Oktal: %o\n" 255 255 255
Ausgabe:
Dezimal: 255, Hex: ff, Oktal: 377
Escape-Sequenzen
Escape-Sequenzen beginnen mit einem Backslash und erzeugen spezielle Zeichen:
| Sequenz | Bedeutung |
|---|---|
\n | Zeilenumbruch |
\t | Tabulator |
\r | Wagenrücklauf |
\\ | Backslash |
printf "Zeile 1\nZeile 2\n"
Feldbreite und Ausrichtung
Die Feldbreite legt die Mindestanzahl an Zeichen für einen Wert fest:
printf "%10s %5d\n" "Artikel" 42
printf "%10s %5d\n" "Test" 7
Ausgabe:
Artikel 42
Test 7
Die Werte werden standardmäßig rechtsbündig ausgerichtet. Mit einem Minuszeichen erreichst du linksbündige Ausrichtung:
printf "%-10s %-5d\n" "Artikel" 42
printf "%-10s %-5d\n" "Test" 7
Ausgabe:
Artikel 42
Test 7
Führende Nullen
Für Zahlen kannst du führende Nullen mit 0 vor der Feldbreite erzeugen:
printf "%05d\n" 42
Ausgabe:
00042
Genauigkeit bei Fließkommazahlen
Die Genauigkeit gibt die Anzahl der Nachkommastellen an:
printf "%.2f\n" 3.14159
Ausgabe:
3.14
Kombiniert mit Feldbreite:
printf "%8.2f\n" 3.14159
printf "%8.2f\n" 123.456
Ausgabe:
3.14
123.46
Ausgabe in Variable speichern
Mit der Option -v speicherst du das Ergebnis in einer Variablen:
printf -v datum "%04d-%02d-%02d" 2025 1 16
echo "$datum"
Ausgabe:
2025-01-16
Das ist nützlich, wenn du formatierte Werte weiterverarbeiten möchtest, ohne eine Subshell zu verwenden.
Praktische Beispiele
Tabelle formatieren
printf "%-15s %10s %10s\n" "Produkt" "Preis" "Anzahl"
printf "%-15s %10.2f %10d\n" "Tastatur" 49.99 5
printf "%-15s %10.2f %10d\n" "Maus" 24.50 12
printf "%-15s %10.2f %10d\n" "Monitor" 299.00 2
Ausgabe:
Produkt Preis Anzahl
Tastatur 49.99 5
Maus 24.50 12
Monitor 299.00 2
Fortschrittsanzeige
for i in {1..5}; do
printf "\rFortschritt: %d%%" $((i * 20))
sleep 1
done
printf "\n"
Der Wagenrücklauf \r setzt den Cursor an den Zeilenanfang zurück, sodass die Zeile überschrieben wird.
Mehrere Argumente verarbeiten
Wenn mehr Argumente als Platzhalter vorhanden sind, wiederholt printf den Formatstring:
printf "%s\n" eins zwei drei
Ausgabe:
eins
zwei
drei
Zusammenfassung
Der Befehl printf formatiert Ausgaben präzise mit Platzhaltern, Feldbreiten und Genauigkeitsangaben. Er eignet sich besonders für tabellarische Ausgaben, formatierte Zahlen und überall dort, wo echo nicht ausreicht.