Pure Bash, 외부 유틸리티 없음
이 데모는 완전한 양쪽 맞춤을 수행하지만, 오른쪽의 불규칙한 선을 원하면 두 번째 문자열의 길이를 빼는 것을 생략 할 수 있습니다.
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
불행히도이 기술에서 패드 문자열의 길이는 필요하다고 생각하는 가장 긴 길이보다 길도록 하드 코딩되어야하지만, 패드 길이는 표시된대로 변수가 될 수 있습니다. 그러나 패드의 길이에 대한 변수를 사용할 수 있도록 첫 번째 줄을 다음 세 줄로 바꿀 수 있습니다.
padlimit=60
pad=$(printf '%*s' "$padlimit")
pad=${pad// /-}
따라서 패드 ( padlimit
및 padlength
)는 터미널 너비 ( $COLUMNS
)를 기반으로 하거나 가장 긴 데이터 문자열의 길이에서 계산 될 수 있습니다 .
산출:
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 -v pad '%*s' "$padlimit"
원하는 경우 한 줄에 모두 인쇄 할 수 있습니다.
printf '%s%*.*s%s\n' "$string1" 0 $((padlength - ${#string1} - ${#string2} )) "$pad" "$string2"