Pure Bash, sin utilidades externas
Esta demostración tiene una justificación completa, pero puede omitir restar la longitud de la segunda cadena si desea líneas irregulares a la derecha.
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
Desafortunadamente, en esa técnica, la longitud de la cuerda de la almohadilla debe estar codificada para que sea más larga que la más larga que cree que necesitará, pero la longitud de la almohadilla puede ser una variable como se muestra. Sin embargo, puede reemplazar la primera línea con estas tres para poder usar una variable para la longitud del pad:
padlimit=60
pad=$(printf '%*s' "$padlimit")
pad=${pad// /-}
Entonces, el pad ( padlimit
y padlength
) podría basarse en el ancho de la terminal ( $COLUMNS
) o calcularse a partir de la longitud de la cadena de datos más larga.
Salida:
a--------------------------------bbbbbbb
aa--------------------------------bbbbbb
aaaa-------------------------------bbbbb
aaaaaaaa----------------------------bbbb
Sin restar la longitud de la segunda cadena:
a---------------------------------------bbbbbbb
aa--------------------------------------bbbbbb
aaaa------------------------------------bbbbb
aaaaaaaa--------------------------------bbbb
En cambio, la primera línea podría ser el equivalente (similar a sprintf
):
printf -v pad '%0.1s' "-"{1..60}
o similar para la técnica más dinámica:
printf -v pad '%*s' "$padlimit"
Puede imprimir todo en una línea si lo prefiere:
printf '%s%*.*s%s\n' "$string1" 0 $((padlength - ${#string1} - ${#string2} )) "$pad" "$string2"