문자열의 후행 공백을 다른 문자로 채웁니다.

문자열의 후행 공백을 다른 문자로 채웁니다.

출력하고 싶어요hello world20자 이상.

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"

관련 정보