Pure Bash, harici yardımcı program yok
Bu gösteri tam gerekçelendirme yapar, ancak düzensiz doğru satırlar istiyorsanız ikinci dizenin uzunluğunu çıkarmayı atlayabilirsiniz.
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
Ne yazık ki, bu teknikte, ped dizisinin uzunluğu, ihtiyacınız olacağını düşündüğünüz en uzun olandan daha uzun olacak şekilde kodlanmalıdır, ancak dolgu uzunluğu gösterildiği gibi bir değişken olabilir. Bununla birlikte, pedin uzunluğu için bir değişken kullanabilmek için ilk satırı bu üç satırla değiştirebilirsiniz:
padlimit=60
pad=$(printf '%*s' "$padlimit")
pad=${pad// /-}
Dolayısıyla, ped ( padlimit
ve padlength
) terminal genişliğine ( $COLUMNS
) dayalı olabilir veya en uzun veri dizisinin uzunluğundan hesaplanabilir.
Çıktı:
a--------------------------------bbbbbbb
aa--------------------------------bbbbbb
aaaa-------------------------------bbbbb
aaaaaaaa----------------------------bbbb
İkinci dizenin uzunluğunu çıkarmadan:
a---------------------------------------bbbbbbb
aa--------------------------------------bbbbbb
aaaa------------------------------------bbbbb
aaaaaaaa--------------------------------bbbb
İlk satır bunun yerine eşdeğer olabilir (şuna benzer sprintf
):
printf -v pad '%0.1s' "-"{1..60}
veya benzer şekilde daha dinamik teknik için:
printf -v pad '%*s' "$padlimit"
İsterseniz yazdırmayı tek satırda yapabilirsiniz:
printf '%s%*.*s%s\n' "$string1" 0 $((padlength - ${#string1} - ${#string2} )) "$pad" "$string2"