Linux / Befehl printf: Werte mit einem definierten Format drucken

printf druckt Zeichenketten und Zahlen gemäß einem Format-String. Es ist nützlich in Shell-Skripten, weil es Zeilenumbrüche und Spalten genauer steuern kann als echo.

In Bash ist printf ein Shell-Builtin, aber es kann auch ein externes printf von GNU Coreutils existieren. Sie können überprüfen, welche Implementierung verwendet wird, indem Sie type printf ausführen. Da es keinen automatischen Zeilenumbruch gibt, fügen Sie bei Bedarf \n in den Format-String ein.

Grundlegende Syntax

printf 'format string' [values...]

Die installierte Implementierung und Optionen können je nach Distribution variieren. Prüfen Sie die Dokumentation des aktuellen Systems mit man printf.

Beispiele

Zeichenketten und Zeilenumbrüche

Setzen Sie Werte in %s und beenden Sie die Zeile mit \n.

printf 'Hello, %s\n' Linux

Spaltenbreiten ausrichten

Legen Sie die linksbündigen Breiten und Zahlenbreiten fest, um eine einfache Tabelle zu erstellen.

printf '%-12s %5d\n' apple 42

Mehrfache Wert-Ausgabe wiederholen

Der Format-String wird wiederholt auf die verbleibenden Argumente angewendet.

printf '%s\n' one two three

Vergleich von Format-Strings und tatsächlicher Ausgabe

printf fügt die Argumente in der Reihenfolge in die Formatspezifizierer ein. %-6s zeigt eine linksbündige Zeichenkette mit einer Breite von 6 an, und %03d füllt eine ganze Zahl mit Nullen auf bis zu drei Stellen.

printf '[%-6s] [%03d]\n' apple 7

Beispielausgabe:

[apple ] [007]

Der \n am Ende der Formatzeichenfolge ist ein Zeilenumbruch. Im Gegensatz zu echo garantiert printf keine automatischen Zeilenumbrüche, daher geben Sie ihn an, wenn nötig. Wenn Benutzereingaben direkt in die Formatzeichenfolge eingefügt werden, könnten % oder Rückwärtsschrägstriche interpretiert werden, daher verwenden Sie ein festes Format wie printf '%s\n' "$value".

Hauptoptionen und Format

Optionen/Format Beschreibung
%s Gibt den Wert als Zeichenfolge aus.
%d Gibt eine Ganzzahl in Dezimalform aus.
%f Gibt eine Gleitkommazahl mit der angegebenen Genauigkeit aus.
\n Stellt einen Zeilenumbruch innerhalb einer Formatzeichenfolge dar.
%-Ns Richtet eine Zeichenfolge linksbündig innerhalb eines Feldes mit mindestens N Zeichen Breite aus.

Vorsichtsmaßnahmen bei der Verwendung

Wenn Benutzereingaben als Formatzeichenfolge selbst übergeben werden, werden %-Spezifikationen interpretiert. Um den Wert sicher auszugeben, verwenden Sie ein festes Format wie printf '%s\n' "$value". Setzen Sie Shell-Variablen in Anführungszeichen, um Worttrennung und Platzhaltererweiterung zu verhindern.

Häufig gestellte Fragen

Fügt printf automatisch wie echo eine neue Zeile am Ende hinzu?

Nein. Um Zeilen zu wechseln, müssen Sie \n direkt in die Formatzeichenfolge einfügen.

Offizielle Dokumentation

Sie können das genaue Verhalten der Optionen und Implementierungsunterschiede in der offiziellen Dokumentation für printf überprüfen.

Für das Verhalten von externen Befehlen siehe auch das offizielle GNU Coreutils-Handbuch.