Pure Bash, sem utilitários externos
Esta demonstração justifica totalmente, mas você pode simplesmente omitir a subtração do comprimento da segunda string se desejar linhas retas irregulares.
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
Infelizmente, nessa técnica, o comprimento da corda da almofada deve ser codificado para ser maior do que a mais longa que você acha que vai precisar, mas o comprimento da almofada pode ser uma variável, conforme mostrado. No entanto, você pode substituir a primeira linha por estas três para poder usar uma variável para o comprimento do bloco:
padlimit=60
pad=$(printf '%*s' "$padlimit")
pad=${pad// /-}
Portanto, o pad ( padlimit
e padlength
) pode ser baseado na largura do terminal ( $COLUMNS
) ou calculado a partir do comprimento da string de dados mais longa.
Resultado:
a--------------------------------bbbbbbb
aa--------------------------------bbbbbb
aaaa-------------------------------bbbbb
aaaaaaaa----------------------------bbbb
Sem subtrair o comprimento da segunda string:
a---------------------------------------bbbbbbb
aa--------------------------------------bbbbbb
aaaa------------------------------------bbbbb
aaaaaaaa--------------------------------bbbb
A primeira linha pode ser equivalente (semelhante a sprintf
):
printf -v pad '%0.1s' "-"{1..60}
ou da mesma forma para a técnica mais dinâmica:
printf -v pad '%*s' "$padlimit"
Você pode imprimir tudo em uma linha, se preferir:
printf '%s%*.*s%s\n' "$string1" 0 $((padlength - ${#string1} - ${#string2} )) "$pad" "$string2"