출력하고 싶어요hello world
20자 이상.
printf "%-20s :\n\n" 'hello world!!'
# Actual output
hello world!! :
# Wanted output
hello world!!========:
하지만 저는 공백으로 하고 싶지 않고 "="그 반대로요. 어떻게 해야 합니까?
답변1
filler='===================='
string='foo'
printf '%s\n' "$string${filler:${#string}}"
주다
foo=================
${#string}
offset에서 시작하는 하위 문자열 $string
인 value 의 길이입니다 .${filler:${#string}}
$filler
${#string}
출력의 전체 너비는 $filler
또는 의 최대 너비 가 됩니다 $string
.
jot
다음이 포함된 시스템의 경우
filler=$( jot -s '' -c 16 '=' '=' )
( =
행당 16개). GNU 시스템은 다음을 사용할 수 있습니다 seq
:
filler=$( seq -s '=' 1 16 | tr -dc '=' )
다른 시스템에서는 Perl이나 동적으로 문자열을 생성하는 다른 더 빠른 방법을 사용할 수 있습니다.
답변2
printf "%.20s:\n\n" "$str========================="
%.20s
문자열 잘림 형식은 어디에 있나요?
답변3
한 가지 방법은 다음과 같습니다.
printf "====================:\r%s\n\n" 'hello world!!'
답변4
펄 방법:
$ perl -le '$k="hello world!!"; while(length($k)<20){$k.="=";} print "$k\n"'
hello world!!=======
또는 @SatoKatsura가 댓글에서 지적한 것이 더 좋습니다.
perl -le '$k = "hello world!!"; print $k, "=" x (20-length $k), "\n"'
UTF 멀티바이트 문자를 지원해야 하는 경우 다음을 사용하세요.
PERL_UNICODE='AS' perl -le '$k = "hello world!!"; print $k, "=" x (20-length $k), "\n"'
쉘에서도 같은 아이디어:
v='hello world!!'; while [ ${#v} -lt 20 ]; do v="$v""="; done; printf '%s\n\n' "$v"