Jika semua karakter tersebut adalah single-byte, yaitu jika Anda berada di lokal di mana charset adalah single-byte (seperti iso8859-1) atau jika charset lokalnya adalah UTF-8 tetapi teksnya hanya ASCII, Anda dapat melakukannya :
printf -v y %-40.40s "$y"
Itu akan mencakup pemotongan dan bantalan.
Jika tidak, Anda selalu dapat menambahkan 40 spasi dan menggunakan ${y:0:40}
pendekatan Anda .
printf -v pad %40s
y=$y$pad
y=${y:0:40}
zsh
memiliki operator khusus untuk bantalan kiri dan kanan:
y=${(r:40:)y}
(juga tidak pemotongan). zsh
's printf
penting dalam karakter bukan byte, jadi tidak akan memiliki bash
' masalah s di atas. Namun perhatikan bahwa Anda perlu zsh
5.3 atau lebih baru untuk -v
opsi.
Lihat juga jawaban ini untuk pertanyaan terkait untuk detail lebih lanjut jika Anda dihadapkan dengan karakter yang tidak semuanya memiliki lebar yang sama.