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:

ZeichenBedeutung
%sZeichenkette (String)
%d, %iGanzzahl (Dezimal)
%fFließkommazahl
%x, %XHexadezimalzahl (klein/groß)
%oOktalzahl
%cEinzelnes 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:

SequenzBedeutung
\nZeilenumbruch
\tTabulator
\rWagenrü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.