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.