หากอักขระเหล่านั้นเป็นไบต์เดียวทั้งหมดนั่นคือถ้าคุณอยู่ในสถานที่ที่ชุดอักขระเป็นไบต์เดียว (เช่น iso8859-1) หรือถ้าชุดอักขระของสถานที่ตั้งเป็น UTF-8 แต่ข้อความเป็น ASCII เท่านั้นคุณสามารถทำได้ :
printf -v y %-40.40s "$y"
ที่จะครอบคลุมทั้งการตัดและการขยาย
ถ้าไม่คุณสามารถเพิ่ม 40 ช่องว่างและใช้${y:0:40}วิธีการของคุณ
printf -v pad %40s
y=$y$pad
y=${y:0:40}
zsh มีผู้ประกอบการเฉพาะด้านซ้ายและขวา:
y=${(r:40:)y}
(ยังตัดทอน) zsh's printfนับตัวอักษรแทนของไบต์ดังนั้นจะไม่ได้bashของปัญหาดังกล่าว อย่างไรก็ตามโปรดทราบว่าคุณต้องใช้zsh5.3 หรือใหม่กว่าสำหรับ-vตัวเลือก
ดูคำตอบนี้สำหรับคำถามที่เกี่ยวข้องเพื่อดูรายละเอียดเพิ่มเติมหากคุณเผชิญกับตัวละครที่ไม่ได้มีความกว้างเท่ากัน