it-swarm.com.de

Bash füge nachfolgende Leerzeichen hinzu, um die Zeichenfolge zu rechtfertigen

Mein aktueller Code sieht folgendermaßen aus: x=${y:0:40}, wodurch die Länge der Zeichenfolge auf 40 Zeichen begrenzt wird. Ist es möglich, die nachfolgenden Stellen mit Leerzeichen zu füllen, wenn die Zeichenfolge kürzer als 40 Zeichen ist?

Also wenn mein y="very short text"

Ich möchte, dass mein y ist:

y = "sehr kurzer Text (+ 25 nachgestellte Leerzeichen) "

22
user222977

Wenn diese Zeichen alle Einzelbyte sind, dh wenn Sie sich in einem Gebietsschema befinden, in dem der Zeichensatz Einzelbyte ist (wie iso8859-1), oder wenn der Zeichensatz des Gebietsschemas UTF-8 ist, der Text jedoch ASCII können Sie tun:

printf -v y %-40.40s "$y"

Dies gilt sowohl für das Abschneiden als auch für das Auffüllen.

Wenn nicht, können Sie immer 40 Leerzeichen hinzufügen und Ihren ${y:0:40} - Ansatz verwenden.

printf -v pad %40s
y=$y$pad
y=${y:0:40}

zsh verfügt über dedizierte Operatoren für das Auffüllen von links und rechts:

y=${(r:40:)y}

(schneidet auch ab). zsh 's printf zählt in Zeichen anstelle von Bytes, daher hätte bash oben kein Problem. Beachten Sie jedoch, dass Sie für die Option -vzsh 5.3 oder neuer benötigen.

Siehe auch diese Antwort auf eine verwandte Frage für weitere Details, wenn Sie mit Zeichen konfrontiert sind, die nicht alle die gleiche Breite haben.

22

Sie sollten printf versuchen:

printf '%-40s' "$y"
17
user218374

Pure bash:

ten="          " 
forty="$ten$ten$ten$ten" 
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"

Die Methode besteht darin, jeder Zeichenfolge nach dem Abschneiden 0-40 Leerzeichen hinzuzufügen.

Ausgabe, (beachten Sie die einfachen Anführungszeichen):

'very short text                         '
11
agc