純猛砸,無需外接公用事業
該演示也有充足的理由,但你可以省略減去的長度第二個字符串,如果你想要粗糙的線條。
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