Bashは文字列を正当化するために末尾のスペースを追加します


20

私の現在のコードは次のようになります:x=${y:0:40}文字列の長さを40文字に制限します。文字列が40文字より短い場合、末尾の場所をスペースで埋めることは可能ですか?

だから私の場合 y="very short text"

私のyになりたい:

y = "非常に短いテキスト(+25末尾のスペース) "

回答:


20

それらの文字がすべてシングルバイトである場合、つまり、文字セットがシングルバイトのロケール(iso8859-1など)である場合、またはロケールの文字セットがUTF-8であるがテキストはASCIIのみである場合、 :

printf -v y %-40.40s "$y"

それは切り捨てとパディングの両方をカバーします。

そうでない場合は、いつでも40個のスペースを追加して${y:0:40}アプローチを使用できます。

printf -v pad %40s
y=$y$pad
y=${y:0:40}

zsh 左右のパディング専用の演算子があります:

y=${(r:40:)y}

(切り捨ても行います)。文字数カウントの代わりのバイトなので、持っていない上記の問題。ただし、オプションには5.3以降が必要です。zshprintfbashzsh-v

すべてが同じ幅ではない文字に直面している場合の詳細については、関連する質問に対するこの回答も参照してください。


14

あなたが試してみてくださいprintf

printf '%-40s' "$y"

10

ピュアbash

ten="          " 
forty="$ten$ten$ten$ten" 
y="very short text"
y="${y:0:40}${forty:0:$((40 - ${#y}))}"
echo "'${y}'"

この方法では、すべての文字列を切り捨てた後、0〜40個のスペースを追加します。

出力(一重引用符の位置に注意してください):

'very short text                         '

1
このメソッドは変数で直接機能し、出力する必要がないため、この方法を使用します。
デビッドTabernero M.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.