纯猛砸,无需外接公用事业
该演示也有充足的理由,但你可以省略减去的长度第二个字符串,如果你想要粗糙的线条。
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
不幸的是,pad字符串的长度必须被硬编码,但padlength可以是一个变量,如图所示。
输出:
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"
但是,只有在终端。如果输出发送到一个文件将是一团糟。 – thkala 2010-12-10 13:53:33
所以你真正期望从一个简单的解决方案?!?全面工作也与输出重定向?!? ]:P – 2010-12-10 13:56:19