文字列の末尾のスペースを別の文字で埋めます。

文字列の末尾のスペースを別の文字で埋めます。

出力したい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で始まる部分文字列、$stringvalueの長さ。${filler:${#string}}$filler${#string}

出力の全幅はまたはの最$filler大幅になります$string

jot以下を含むシステムの場合

filler=$( jot -s '' -c 16 '=' '=' )

=1行あたり16個)。 GNUシステムは次のものを使用できますseq

filler=$( seq -s '=' 1 16 | tr -dc '=' )

他のシステムでは、Perlまたは動的に文字列を生成する他のより高速な方法を使用できます。

答え2

printf "%.20s:\n\n" "$str========================="

%.20s文字列切り捨て形式はどこにありますか?

答え3

1つの方法は次のとおりです。

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"

関連情報