Bash添加尾随空格以证明字符串正确


20

我当前的代码如下:x=${y:0:40},它将字符串的长度限制为40个字符。如果字符串少于40个字符,是否可以在结尾处填充空格?

所以如果我的 y="very short text"

我希望自己是:

y =“非常短的文字(+25个结尾空格)

Answers:


20

如果这些字符都是单字节的,也就是说,如果您处于字符集为单字节的语言环境中(例如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}

(也有截断)。zshprintf字符数而不是字节数,因此bash上面没有问题。但是请注意,zsh-v选项需要5.3或更高版本。

如果您遇到的字符宽度都不相同,请参见相关问题的答案以获取更多详细信息。


14

您应该尝试printf

printf '%-40s' "$y"

10

bash

ten="          " 
forty="$ten$ten$ten$ten" 
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"

该方法是在将每个字符串截断后在其上添加0-40个空格。

输出,(请注意单引号位置):

'very short text                         '

1
我宁愿使用此方法,因为它将直接在变量上工作,并且不需要输出。
David Tabernero M.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.