bashのprintfで文字列をセンター寄せしたいということがあったので、備忘で残しておく。 残念ながら、以前調べた際にわかったこととしてbashのprintfの機能として、センター寄せは用意されていないようだということ。

なので、ちょっと野暮ったいけど、以下のようにprintfに渡す際に幅を1/2して出力させることで、真ん中にテキストを出力させることができるようになる。 ターミナルの中央に表示させる場合は、『tput cols』コマンドで幅を取得できるのでサブシェルで取得させるといいだろう。

printf "%*s\n" $(( (幅 + $(printf 文字列 | wc -c)) / 2 )) 文字列
printf "%*s\n" $(( ($(tput cols) + $(printf 文字列 | wc -c)) / 2 )) 文字列 # ターミナルの中央に配置する場合

blacknon@BS-PUB-UBUNTU-01:~$ echo a{01..03} ab{01..03} abc{01..03} abcd{01..03} | xargs -n1 | xargs -I@ bash -c 'printf "%*s\n" $(( (20 + $(printf @ | wc -c)) / 2 )) @'
        a01
        a02
        a03
        ab01
        ab02
        ab03
       abc01
       abc02
       abc03
       abcd01
       abcd02
       abcd03

なお、BSD系のOS(Mac OS Xとか)に入っているfmtコマンドの場合、-cオプションを付与することでセンター寄せしての出力ができるようだ。 残念ながらGNU fmtではできないので注意。

コマンド | fmt -c -w 幅