string yang dikutip printf

Oct 02 2020

Saya mencoba membuat tabel di bash - saya telah mengumpulkan semua judul ke dalam var - namun ketika saya mencetak string ini yang diapit oleh "diperlakukan sebagai kolom baru dan bukan sebagai satu oleh perintah printf

Ketika saya mengirimkan nilai yang sama secara langsung, itu berfungsi dengan baik, tetapi saya mendapatkan perilaku yang berbeda ketika saya menggunakan $ var sebagai gantinya.

$ 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

Saya jelas salah memahami sesuatu tentang bagaimana variabel saya berbeda < some string >dan oleh karena itu menghasilkan perilaku yang berbeda.

Bagaimana cara mendapatkan keluaran yang cocok dengan keluaran 1 saat menggunakan variabel?

edit: Saya dapat melihat versi var memiliki tanda kutip - apakah ada cara agar saya dapat mengirimkan string yang dikutip ke printf sebagai variabel?

Jawaban

7 choroba Oct 02 2020 at 19:08

Variabel diperluas sebelum shell menjalankan perintah apa pun, yaitu di printfsini, dan pemisahan kata terjadi setelah perluasan variabel. Gunakan array sebagai ganti variabel skalar:

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