bash – printf中的填充字符

前端之家收集整理的这篇文章主要介绍了bash – printf中的填充字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我编写一个bash shell脚本来显示进程是否正在运行。

到目前为止,我在这里。

printf "%-50s %s\n" $PROC_NAME [UP]

这给了我一个输出

JBoss                                              [DOWN]

GlassFish                                          [UP]

verylongprocessname                                [UP]

我想用’ – ‘或’*’填充两个字段之间的差距,使其更易读。我怎么做,而不打扰字段的对齐?

我想要的输出是:

JBoss -------------------------------------------  [DOWN]

GlassFish ---------------------------------------  [UP]

verylongprocessname -----------------------------  [UP]
纯Bash,没有外部实用程序

这个演示完全证明,但你可以省略减去第二个字符串的长度,如果你想要粗糙的右边线。

pad=$(printf '%0.1s' "-"{1..60})
padlength=40
string2='bbbbbbb'
for string1 in a aa aaaa aaaaaaaa
do
     printf '%s' "$string1"
     printf '%*.*s' 0 $((padlength - ${#string1} - ${#string2} )) "$pad"
     printf '%s\n' "$string2"
     string2=${string2:1}
done

不幸的是,焊盘串的长度必须硬编码,但是焊盘长度可以是如图所示的变量。

输出

a--------------------------------bbbbbbb
aa--------------------------------bbbbbb
aaaa-------------------------------bbbbb
aaaaaaaa----------------------------bbbb

不减去第二个字符串的长度:

a---------------------------------------bbbbbbb
aa--------------------------------------bbbbbb
aaaa------------------------------------bbbbb
aaaaaaaa--------------------------------bbbb

第一行可以是等价的(类似于sprintf):

printf -v pad '%0.1s' "-"{1..60}

如果您愿意,可以在一行上打印:

printf '%s%*.*s%s\n' "$string1" 0 $((padlength - ${#string1} - ${#string2} )) "$pad" "$string2"
原文链接:https://www.f2er.com/bash/392201.html

猜你在找的Bash相关文章