Nếu các ký tự đó đều là byte đơn, đó là nếu bạn đang ở một địa điểm nơi bộ ký tự là byte đơn (như iso8859-1) hoặc nếu bộ ký tự của miền địa phương là UTF-8 nhưng văn bản chỉ là ASCII, bạn có thể làm :
printf -v y %-40.40s "$y"
Điều đó sẽ bao gồm cả cắt ngắn và đệm.
Nếu không, bạn luôn có thể thêm 40 khoảng trắng và sử dụng ${y:0:40}
phương pháp của bạn .
printf -v pad %40s
y=$y$pad
y=${y:0:40}
zsh
có các toán tử chuyên dụng cho phần đệm bên trái và bên phải:
y=${(r:40:)y}
(cũng không cắt ngắn). zsh
's printf
đếm bằng ký tự thay vì byte, vì vậy sẽ không có bash
' vấn đề s trên. Tuy nhiên lưu ý rằng bạn cần zsh
5.3 hoặc mới hơn cho -v
tùy chọn.
Xem thêm câu trả lời này cho một câu hỏi liên quan để biết thêm chi tiết nếu bạn phải đối mặt với các nhân vật không có cùng chiều rộng.