PRINTF(1)

名称
printf - フォーマット済み出力

書式
printf format [arguments ...]

解説
printf ユーティリティは第一引数より後の引数をフォーマットに合わせて出力します。 format は 3 種類のオブジェクトを含む文字列です。 一つは通常の文字列で、単純に標準出力にコピーされます。 一つはエスケープシーケンスで、変換されてから標準出力にコピーされます。 もう一つはフォーマット記述で、これらはそれぞれ、後に続く arguments を表示します。

第一引数より後の arguments は、対応するフォーマットが c, b, s のいずれか場合は文字列として扱われ、それ以外は以下のような拡張部分と 合わせて C の定数として評価されます。

•   先頭に ``+'' や ``-'' の符号をつけることができます。
•   もし先頭がシングルクォートやダブルクォートで始まっている場合、 その値は次の文字の ASCII コードになります。

フォーマット文字列は arguments を変換するために何度も再利用されます。 余分なフォーマット記述は 0 やヌル文字列に評価されます。

キャラクタエスケープシーケンスは ansiC の定義を拡張した、バックスラッシュによる表記です。 キャラクタとその意味は以下のようになります。

\a  <ベル> キャラクタを書きます。
\b  <バックスペース> キャラクタを書きます。
\c  この文字列中の残りのキャラクタを無視します。
\f  <フォームフィード> キャラクタを書きます。
\n  <改行> キャラクタを書きます。
\r  <復帰> キャラクタを書きます。
\t  <タブ> キャラクタを書きます。
\v  <垂直タブ> キャラクタを書きます。
\'  <シングルクォート> キャラクタを書きます。
\\  <バックスラッシュ>キャラクタを書きます。
\num
\0num
    1 から 3 桁の 8 進数 num で表される ASCII コードの 8 ビット文字を書きます。

各フォーマットの指定はパーセント文字 (``%'') から始まります。 フォーマットの他の部分は、以下の順番で続きます:

以下のフラグが 0 個以上つきます:

    #   `#' キャラクタは数値を ``別形式'' で表示させるという指定です。 c, d, s フォーマットではこのオプションは無効です。 o フォーマットでは出力文字列の先頭に 0 をつけるため、 その値の精度が上がります。 x (X) フォーマットでは、0 以外の値なら出力される文字列の先頭に 0x (0X) がつきます。 e, E, f, g, G のフォーマットでは、たとえ小数点以下の値がなくても常に小数点がつきます (通常のフォーマットでは、小数点以下の値がある時のみ結果に小数点が含まれます)。 g と G のフォーマットでは、結果の終わりに付く 0 は通常のフォーマットと違って 省略されません。

    -   指定したフィールド幅で 左詰め で出力します。

    +   符号つきのフォーマットの時に、数字の前に常に符号がつくようになります。

    ‘ ’ 符号つきのフォーマットで正の値を表示する時に先頭に空白が一つ挿入されます。 `+' と空白の両方が指定された場合、`+' が空白に優先されます。

    0   `0' は空白でパディングする代りに `0' でパディングを行います。 `-' と `0' の両方が指定された場合、`-' が優先されます。

フィールド幅:
    field width; フィールド幅 を指定するためにオプションとしてつける数値です。 出力する文字列がこのフィールド幅よりも短い場合、フィールド幅を埋めるよ うに左側が (左詰めの指示があれば、右側が) 空白でパディングされます。 (先頭につく 0 はフラグですが、埋め込まれた 0 はフィールド幅の一部であ ることに注意)

精度: オプションでつけるピリオド ‘’., には、 精度 を表わす数のオプションが続きます。 この数は e と f フォーマットの場合に小数点以下の値を表示する桁数を指定します。 e, f 以外では、文字列から表示される文字の最大数になります。 もし精度を表す数がなければ、精度は 0 とされます。

Format:
    フォーマットの型を表す文字です ( diouxXfFeEgGaAcsb のうちのいずれか)。 大文字のフォーマットとその小文字版との違いは、前者の出力が 完全に大文字になるということです。

フィールド幅や精度は数字の代りに ‘*’ も使えます。 この場合、フィールド幅や精度は argument で与えます。

フォーマットキャラクタとその意味は以下のようになります:

diouXx
    argument はそれぞれ符号つき 10 進数 (d または i)、符号なし 8 進数 (o)、 符号なし 10 進数 (u)、符号なし 16 進数 (X または x) で表示されます。

fF  argument が `[-]ddd.ddd' のスタイルで表示され、引数の精度で指定した数だけ小数 点以下の d が続きます。 精度の指定がなければ 6 文字になります。 もし精度が明示的に 0 と指定された場合は 小数点とそれ以下の値は表示されません。 値 と は、それぞれ ‘inf’ と ‘nan’ のように表示されます。

eE  argument が ‘[-d.ddd±dd]’ のように、小数点の前に数字が一つで、後には引数の精度で指定した数だけ 数字が続きます。 精度の指定がなければ 6 文字になります。 値 と は、それぞれ ‘inf’ と ‘nan’ のように表示されます。

gG  argument が、最小の長さで最大の精度が得られるように、 f (F) または、 e (E) で表示されます。

aA  argument が、 ‘[-h.hhh±pd]’ のように、16 進小数点の前は 1 桁で、小数点の後ろは 引数で指定した精度指定と同じだけの桁数で表示します。 精度指定がない場合、引数の倍精度浮動小数点数表現を保持するのに 十分な桁数が生成されます。 値 と とは、それぞれ ‘inf’ と ‘nan’, と表示されます。

c   argument の最初の文字が表示されます。

s   argument が終わりまでか、または精度で指定された文字数だけ表示されます。 精度が 0 かもしくは指定されていない場合は文字列全てが表示されます。

b   s と同様ですが、文字列 argument 中のバックスラッシュ表現のキャラクタエスケープを解釈します。

%   `%' を表示します。 引数は使用しません。

小数点文字は、プログラムのロケール (カテゴリ LC_NUMERIC) で定義されます。

存在しないフィールド、もしくは小さなフィールド幅指定でフィールドが 切り詰められることはありません。 指定されたフィールドが実際の幅を越えた時は、 パディングが起こります。

診断

互換性
伝統的な BSD の動作である、数字で開始しない数値書式引数が、 ASCII コードの最初の文字に変換されるという動作は、サポートされません。

関連項目
echo(1), printf(3)

規格
printf コマンドは、 p1003.2 仕様互換と期待されます。

歴史
printf は、 4.3BSD Reno で追加され、標準ライブラリ関数 printf(3) に基いています。

バグ
浮動小数点数は ASCII から浮動小数点数形式に変換されてまた戻るので、 浮動小数点数の精度が失われます。

ANSI 16 進文字定数はわざと用意されていません。

エスケープシーケンス \000 は文字列終端子です。 format 中に存在すると、 format は文字 \000 のところで切り捨てられます。

フォーマット文字列中のマルチバイト文字は認識されません (これは ‘%’ がマルチバイト文字の内側に出現する可能性がある場合に限られます)。