Answers:
如果这些字符都是单字节的,也就是说,如果您处于字符集为单字节的语言环境中(例如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
的printf
字符数而不是字节数,因此bash
上面没有问题。但是请注意,zsh
该-v
选项需要5.3或更高版本。
如果您遇到的字符宽度都不相同,请参见相关问题的答案以获取更多详细信息。
您应该尝试printf
:
printf '%-40s' "$y"