用另一个字符填充字符串中的尾随空格

用另一个字符填充字符串中的尾随空格

我想输出hello world超过20个字符。

printf "%-20s :\n\n" 'hello world!!'

# Actual output
hello world!!        :

# Wanted output
hello world!!========:

但是,我不想用空格来完成,而是用“=“相反。我该怎么做呢?

答案1

filler='===================='
string='foo'

printf '%s\n' "$string${filler:${#string}}"

给予

foo=================

${#string}是 value 的长度$string,是从 offset 开始${filler:${#string}}的子字符串。$filler${#string}

输出的总宽度将是$filler或的最大宽度$string

jot在具有 的系统上,可以使用动态创建填充字符串

filler=$( jot -s '' -c 16 '=' '=' )

=一行 16 个)。 GNU 系统可以使用seq

filler=$( seq -s '=' 1 16 | tr -dc '=' )

其他系统可能使用 Perl 或其他一些更快的动态创建字符串的方法。

答案2

printf "%.20s:\n\n" "$str========================="

哪里%.20s是字符串截断格式

答案3

一种方法是:

printf "====================:\r%s\n\n" 'hello world!!'

答案4

Perl 方法:

$ perl -le '$k="hello world!!"; while(length($k)<20){$k.="=";} print "$k\n"'
hello world!!=======

或者,更好的是,@SatoKatsura 在评论中指出:

perl -le '$k = "hello world!!"; print $k, "=" x (20-length $k), "\n"'

如果需要支持UTF多字节字符,请使用:

PERL_UNICODE='AS' perl -le '$k = "hello world!!"; print $k, "=" x (20-length $k), "\n"'

shell 中的想法相同:

v='hello world!!'; while [ ${#v} -lt 20 ]; do v="$v""="; done; printf '%s\n\n' "$v"

相关内容