printf - フォーマット形式で文字列を表示する

スポンサーリンク

printfコマンドは、フォーマット指定子を含むようなフォーマット文字列を利用して、文字列を表示するコマンドです。

printfコマンドは、第一引数として、フォーマット文字列を、第二引数以降はフォーマット指定子に代入する値になります。C言語のprintf関数のようにフォーマット文字列を利用できます。

また、文字列を表示するコマンドとしてechoコマンドがあります。echoコマンドの場合、自動で最後に改行が追加されますが、printfコマンドは自動で改行が追加されません。

printfコマンドの構文

printfコマンドの構文

文字列の表示

printfコマンドは、C言語のprintf関数のように利用できます。例えば、0埋めの3桁の数字を表示させたい場合は、'%03d'のようにフォーマット指定子を用いると、値を0埋めの3桁で表示することが出来ます。

コマンド例

実行結果

フォーマット文字列を再利用

C言語のprintf関数と異なり、printfコマンドには面白い特徴があります。
printfコマンドは引数の数がフォーマット指定子の数より多い場合、フォーマット文字列を再利用します。

コマンド例

実行結果

xargsコマンドと組み合わせる

printfコマンドで多くの文字列を加工したい場合、xargsコマンドと組み合わせると文字列の加工が便利です。

コマンド例

実行結果

フォーマット指定子の数に対して、引数が足りない場合、値には0やヌル文字列が入ります。

printfコマンドで利用できるフォーマット指定子

printfコマンドでは以下のフォーマット指定子が利用できます。

フォーマット指定子の種類

指定子変換
%d符号付き整数
%i符号付き整数
%o符号なし8進数
%u符号なし整数
%x符号なし16進数(小文字)
%X符号なし16進数(大文字)
%f通常表記の浮動小数点数
%e指数表記の浮動小数点数(小文字)
%E指数表記の浮動小数点数(大文字)
%g数値の大きさに応じた浮動小数点数(大文字)
%G数値の大きさに応じた浮動小数点数(小文字)
%a16進数(小文字)の指数表記の浮動小数点、指数は10進数
%A16進数(大文字)の指数表記の浮動小数点、指数は10進数
%c単一文字の出力
%s文字列の出力
%n今までの印刷された文字数を変数にセット
%%%を出力
%b文字列のあるエスケープ文字を解釈して、出力
%q文字列をそのままシェルで利用できるように文字をエスケープ

それぞれのフォーマット指定子の利用例は以下のようになります。

コマンド例と実行結果

環境によっては、出力結果が多少異なる場合があります。

フォーマット指定子の変換仕様の構文(参考)

GNU C Libraryより、C言語のフォーマット指定子の変換仕様の構文は以下のようになります。

printfコマンドではparam-noは指定できないので、printfコマンドを利用する場合は

の構文で利用できます。

param-noは、POSIX拡張で、printf関数でのフォーマット文字列の後の引数をパラメータ番号で指定できます。C言語で利用する場合は、全てのフォーマット指定子に対して、param-noを付けます。
flagsは、数字の表示方法などを0埋めや左寄せのように変更できます。
widthはフィールドの幅で、precisionは精度になります。
typeは、long int等の型にかかわるパラメータで%ldのlに当たる部分になります。
conversionは、上の例の%dや%fのdやfの記号に当たる部分になります。

flagについて

flagについては例えば、以下のようなフラグがあります。

flagの種類

フラグ表示方法
’-’左寄せ
’+’符号を表示(正の場合、+)
’ ’%dや%iで符号が指定されていない場合、
接頭辞としてスペースを空ける
’'’桁区切り(GNU拡張)
’0’スペースの代わりに0で埋める

上の表のflagをprintfコマンドで利用すると以下のようになります。

コマンド例と実行結果

参考

GNU Coreutils: printf invocation

Output Conversion Syntax (The GNU C Library)