Bash menambahkan spasi tambahan untuk membenarkan string


20

Kode saya saat ini terlihat seperti ini x=${y:0:40}:, yang membatasi panjang string hingga 40 karakter. Jika string lebih pendek dari 40 karakter, apakah mungkin untuk mengisi tempat trailing dengan spasi?

Jadi, jika saya y="very short text"

Saya ingin y saya menjadi:

y = "teks sangat pendek (+25 spasi tambahan) "

Jawaban:


20

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 printfpenting dalam karakter bukan byte, jadi tidak akan memiliki bash' masalah s di atas. Namun perhatikan bahwa Anda perlu zsh5.3 atau lebih baru untuk -vopsi.

Lihat juga jawaban ini untuk pertanyaan terkait untuk detail lebih lanjut jika Anda dihadapkan dengan karakter yang tidak semuanya memiliki lebar yang sama.


14

Anda harus mencoba printf:

printf '%-40s' "$y"

10

Murni bash:

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

Metode ini adalah menambahkan 0-40 spasi ke setiap string setelah memotongnya.

Output, (perhatikan posisi penawaran tunggal):

'very short text                         '

1
Saya lebih suka menggunakan metode ini, karena akan bekerja secara langsung pada variabel dan tidak perlu output.
David Tabernero M.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.