chuỗi trích dẫn printf

Oct 02 2020

Tôi đang cố gắng tạo một bảng trong bash - tôi đã thu thập tất cả các tiêu đề vào một var - tuy nhiên khi tôi in các chuỗi này được bao bọc trong "s được coi là cột mới chứ không phải là một bởi lệnh printf

Khi tôi chuyển trực tiếp các giá trị giống nhau, nó hoạt động tốt, nhưng tôi nhận được hành vi khác khi tôi sử dụng $ var thay thế.

$ 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

Rõ ràng là tôi đang hiểu sai điều gì đó về cách biến của tôi khác với < some string >và do đó dẫn đến hành vi khác nhau.

Làm cách nào để lấy đầu ra khớp với đầu ra 1 khi sử dụng một biến?

chỉnh sửa: Tôi có thể thấy phiên bản var có các dấu ngoặc kép - có cách nào để tôi có thể chuyển các chuỗi được trích dẫn vào printf dưới dạng một biến không?

Trả lời

7 choroba Oct 02 2020 at 19:08

Biến được mở rộng trước khi trình bao chạy bất kỳ lệnh nào, tức là printfở đây, và việc tách từ xảy ra sau khi mở rộng biến. Sử dụng một mảng thay vì một biến vô hướng:

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