printf tırnaklı dize

Oct 02 2020

Bash'de bir tablo oluşturmaya çalışıyorum - tüm başlıkları bir değişken içinde topladım - ancak "'s içine eklenen bu dizeleri yazdırdığımda printf komutuyla tek sütun olarak değil yeni sütunlar olarak değerlendiriliyor

Aynı değerleri doğrudan ilettiğimde iyi çalışıyor, ancak bunun yerine $ var kullandığımda farklı davranışlar alıyorum.

$ printf '%-20s' "some spaced words" other values; echo -e "\n"
some spaced words   other               values

$ values='"some spaced words" other values' $ echo $values "some spaced words" other values $ printf '%-20s' $values; echo -e "\n"
"some               spaced              words"              other               values

Değişkenimin nasıl farklı olduğu < some string >ve bu nedenle farklı davranışlarla sonuçlandığı konusunda bir şeyi açıkça yanlış anlıyorum .

Bir değişken kullanırken çıktı 1 ile eşleşen çıktıyı nasıl elde ederim?

düzenleme: var sürümünün tırnak işaretlerine sahip olduğunu görebiliyorum - alıntılanmış dizeleri printf'e bir değişken olarak geçirebilmemin bir yolu var mı?

Yanıtlar

7 choroba Oct 02 2020 at 19:08

Kabuk herhangi bir komutu çalıştırmadan önce değişken genişletilir , yani printfburada ve sözcük bölme, değişken genişletmeden sonra gerçekleşir. Skaler değişken yerine bir dizi kullanın:

values=('some spaced words' other values)
printf %-20s "${values[@]}"