Bash dizeyi haklı göstermek için boşluk ekler


20

Geçerli kodum şu şekildedir: x=${y:0:40}dizenin uzunluğunu 40 karakterle sınırlar. Dizenin 40 karakterden kısa olması durumunda, arkadaki boşlukları boşluklarla doldurmak mümkün müdür?

Yani benim y="very short text"

Benim y olmasını istiyorum:

y = "çok kısa metin (+25 arka boşluk) "

Yanıtlar:


20

Bu karakterlerin tümü tek baytsa, yani karakter kümesinin tek bayt olduğu bir yerdeyseniz (iso8859-1 gibi) veya yerel ayarın karakter takımı UTF-8 ise, ancak metin yalnızca ASCII ise, :

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

Bu hem kesmeyi hem de yastığı kapsayacaktır.

Değilse, her zaman 40 boşluk ekleyebilir ve ${y:0:40}yaklaşımınızı kullanabilirsiniz .

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

zsh sol ve sağ dolgu için özel operatörlere sahiptir:

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

(ayrıca kesme). zsh'nin printfbayt yerine karakter cinsinden sayılması, bu yüzden bashyukarıdaki sorun olmazdı . Ancak zsh,-v seçenek .

Aynı genişliğe sahip olmayan karakterlerle karşılaşıyorsanız daha fazla ayrıntı için ilgili soruya verilen bu yanıta bakın .


14

Deneyin printf:

printf '%-40s' "$y"

10

Saf bash:

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

Yöntem, kesildikten sonra her dizeye 0-40 boşluk eklemektir.

Çıktı, (tek tırnak pozisyonlarını not edin):

'very short text                         '

1
Bu yöntemi kullanmayı tercih ederim, çünkü doğrudan değişkenler üzerinde çalışacak ve çıktıya gerek duymayacaktır.
David Tabernero M.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.