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 幅