Pure Bash, keine externen Dienstprogramme
Diese Demonstration ist vollständig gerechtfertigt, aber Sie können das Subtrahieren der Länge der zweiten Zeichenfolge einfach weglassen, wenn Sie unregelmäßige Linien wünschen.
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
Leider muss bei dieser Technik die Länge der Pad-Zeichenfolge fest codiert werden, um länger als die längste zu sein, die Sie für erforderlich halten. Die Pad-Länge kann jedoch wie gezeigt variabel sein. Sie können jedoch die erste Zeile durch diese drei ersetzen, um eine Variable für die Länge des Pads verwenden zu können:
padlimit=60
pad=$(printf '%*s' "$padlimit")
pad=${pad// /-}
Das Pad ( padlimit
und padlength
) könnte also auf der Terminalbreite ( $COLUMNS
) basieren oder aus der Länge der längsten Datenzeichenfolge berechnet werden.
Ausgabe:
a--------------------------------bbbbbbb
aa--------------------------------bbbbbb
aaaa-------------------------------bbbbb
aaaaaaaa----------------------------bbbb
Ohne die Länge der zweiten Zeichenfolge zu subtrahieren:
a---------------------------------------bbbbbbb
aa--------------------------------------bbbbbb
aaaa------------------------------------bbbbb
aaaaaaaa--------------------------------bbbb
Die erste Zeile könnte stattdessen das Äquivalent sein (ähnlich wie sprintf
):
printf -v pad '%0.1s' "-"{1..60}
oder ähnlich für die dynamischere Technik:
printf -v pad '%*s' "$padlimit"
Sie können alles in einer Zeile drucken, wenn Sie möchten:
printf '%s%*.*s%s\n' "$string1" 0 $((padlength - ${#string1} - ${#string2} )) "$pad" "$string2"