Wenn diese Zeichen nur aus einem Byte bestehen, dh wenn Sie sich in einem Gebietsschema befinden, in dem der Zeichensatz aus einem Byte besteht (z. B. iso8859-1), oder wenn der Zeichensatz des Gebietsschemas UTF-8 ist, der Text jedoch nur ASCII-Zeichen enthält, können Sie dies tun :
printf -v y %-40.40s "$y"
Dies deckt sowohl das Abschneiden als auch das Auffüllen ab.
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
hat spezielle Operatoren für die linke und rechte Polsterung:
y=${(r:40:)y}
(Macht auch Kürzung). zsh
's printf
zählt in Zeichen anstelle von Bytes, hätte also oben kein bash
Problem. Beachten Sie jedoch, dass Sie zsh
5.3 oder neuer für die -v
Option benötigen .
Weitere Informationen finden Sie auch in dieser Antwort auf eine verwandte Frage, wenn Sie mit Zeichen konfrontiert sind, die nicht alle die gleiche Breite haben.