2016-07-23 9 views
2

Gibt es ein Beispiel für das Einrücken von Strings in Bash (für die Ausgabe)? Ich habe Beispiele mit printf gefunden, aber sie scheinen nicht wie erwartet zu funktionieren. Ich möchte einfach eine gegebene Zeichenfolge mit einer gegebenen Anzahl von Leerzeichen einrücken.Wie ein String in Bash mit printf einrücken?

echo "Header" 
indent "Item 1" 2 
indent "Sub Item 1a" 4 
indent "Sub Item 1b" 4 

produzieren würde die Ausgabe

Header 
    Item 1 
    Sub Item 1a 
    Sub Item 1b 

Antwort

5

In printf, so etwas wie %3s bedeutet „eine Zeichenfolge, aber mit so vielen Anfangsräume, die erforderlich sind, um sicherzustellen, dass die Zeichenfolge mindestens 3 Spalten breit".

Dies funktioniert auch, wenn die Zeichenfolge die leere Zeichenfolge ist '', in diesem Fall bedeutet %3s im Wesentlichen "drei Leerzeichen".

So kann zum Beispiel indent "Sub Item 1a" 4 ausgedrückt werden als printf '%4s%s\n' '' "Sub Item 1a", die vier Leerzeichen gefolgt von "Sub Item 1a" und einem Zeilenumbruch gedruckt.

Wenn Sie möchten, können Sie indent als Funktion implementieren:

function indent() { 
    local string="$1" 
    local num_spaces="$2" 

    printf "%${num_spaces}s%s\n" '' "$string" 
} 
+0

Haben die Newline dort 'printf "% $ {num_spaces} s% s \ n" hinzuzufügen' – IntrovertedRoot