我当前的代码如下所示:x=${y:0:40}
,它将字符串的长度限制为 40 个字符。如果字符串短于 40 个字符,是否可以用空格填充尾随位置?
所以如果我的 y="very short text"
我希望我y
是:
y="非常短的文本(+25 个尾随空格) "
Sté*_*las 29
如果这些字符都是单字节的,也就是说,如果您处于字符集为单字节(如 iso8859-1)的区域设置中,或者区域设置的字符集为 UTF-8 但文本仅为 ASCII,则您可以这样做:
printf -v y %-40.40s "$y"
Run Code Online (Sandbox Code Playgroud)
这将涵盖截断和填充。
如果没有,您始终可以添加 40 个空格并使用您的${y:0:40}
方法。
printf -v pad %40s
y=$y$pad
y=${y:0:40}
Run Code Online (Sandbox Code Playgroud)
zsh
具有用于左右填充的专用运算符:
y=${(r:40:)y}
Run Code Online (Sandbox Code Playgroud)
(也做截断)。zsh
'sprintf
以字符数而不是字节数计数(或者如果还使用m
参数扩展标志,则基于字符的显示宽度),所以不会有bash
上面的 's 问题。但是请注意,zsh
该-v
选项需要5.3 或更高版本。
如果您遇到的字符宽度不同,另请参阅相关问题的答案以获取更多详细信息。
小智 27
你应该尝试printf
:
printf '%-40s' "$y"
Run Code Online (Sandbox Code Playgroud)
agc*_*agc 13
纯bash
:
ten=" "
forty="$ten$ten$ten$ten"
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"
Run Code Online (Sandbox Code Playgroud)
方法是在每个字符串截断后添加0-40个空格。
输出,(注意单引号位置):
'very short text '
Run Code Online (Sandbox Code Playgroud)