連続したスペースをシェルで扱うときはprintfを使う

ある個数分の連続したスペースを使用したければスペースをループで結合して使用するなどは行わない方がいい。printfを使用する方が簡潔に書ける。

上のコードは1行で書ける。

余談1.

ちなみにスペースを含む変数は、ダブルクォーテーションで括らないと、echoしたときに連続するスペースが消されてしまう。

もしスペース始まりであれば、先行するスペースはすべて消える。

余談2. & 応用

printfは標準出力を整形して出力することが目的なので、sedと組み合わせて、テンプレートファイルのきれいな編集などにも使える。

たとえば、次のようなテンプレートファイルがあり、%TITLE%を置き換えたうえで、末尾の##を他の行と揃えたいとする。

#が70文字分あり、文頭の'## 'と文末の'##'の5文字分以外をTITLEとスペースで埋めればいいので、printf %-65s "$title"となる。-65sとなっていて、-がついているのは左揃えにしたいから。printf %65s "$title"だと右揃えになってしまう。

-Linux