PRINTF(1) | FreeBSD General Commands Manual | PRINTF(1) |
名称
printf — 書式化された出力書式
printf | format [ arguments ...] |
解説
printf ユーティリティは、 format の制御の下で、1 番目の後ろの引数を書式化 (format) して印刷します。 format は、3 つのタイプのオブジェクトを含む文字列です: 平易な文字は、単に標準出力にコピーされます、エスケープシーケンスの文字は、変換され標準出力にコピーされます、そして書式指定 (format specification) は、それぞれ次に続く argument を印刷します。1 番目の後ろの arguments は、対応する書式が c, b または s のいずれかであるなら、文字列として処理されます。そうでなければ、次の拡張とともに C の定数として評価されます:
- 先導するプラスまたはマイナス記号が許されます。
- 先導する文字がシングルクォートまたはダブルクォートであるなら、値は、次の文字の文字コードです。
書式文字列は、 arguments を満たすために必要に応じてしばしば再利用されます。任意の余分な書式指定は、0 またはヌル文字列で評価されます。
エスケープシーケンス文字は、拡張された ANSI X3.159-1989 (“ANSI C89”) で定義されたバックスラッシュ記法です。文字とそれらの意味は、次の通りです:
- \a
- <ベル>文字を書き込みます。
- \b
- <バックスペース>文字を書き込みます。
- \c
- この文字列の残りの文字を無視します。
- \f
- <フォームフィード>文字を書き込みます。
- \n
- <改行>文字を書き込みます
- \r
- <キャリッジリターン>文字を書き込みます
- \t
- <タブ>文字を書き込みます
- \v
- <垂直タブ>文字を書き込みます。
- \´
- <シングルクォート>文字を書き込みます。
- \\
- バックスラッシュ文字を書き込みます。
- \ num
- 値が 1、2 または 3 桁の 8 進数 num のバイトを書き込みます。複数の \ num シーケンスを使用してマルチバイト文字を構成することができます。
各書式指定は、パーセント文字 (``%'') によって始まります。書式指定の残りは、次の順序で含めます:
- 0 個以上の次のフラグ:
-
- #
-
`#' 文字は、値が ``代わりの形式'' で印刷されるべきであることを指定します。
b,
c,
d,
s と
u 書式について、このオプションは、効果がありません。
o 書式について、数値の精度は、出力文字列の先頭文字を強制的に 0 にするために向上されます。
x (
X) 書式について、0 以外の結果には、その前に、文字列
0x
(0X
) が付け加えられます。 a, A, e, E, f, F, g と G 書式について、結果は、たとえ小数点に数値が続かなくても、常に小数点を含みます (通常、小数点は、数値が小数点に続くなら、それらの書式の結果のみに現れます)。 g と G 書式について、後続する 0 は、それらの結果から取り除かれません、そうでなければ、取り除かれます。 - -
- マイナス記号 `-' は、指定されたフィールドで出力の 左詰め を指定します。
- +
- `+' 文字は、符号付き書式を使用するとき、常に数値の前に置かれる符号となることを指定します。
- ‘ ’
- 符号付き書式のために正の数値の前に残される空白を指定する空白。両方が使用されているなら、`+' は、空白に優先します。
- 0
- ゼロ `0' 文字は、空白でパディングするのではなく、0 のパディングが使用されるべきであることを示します。両方が使用されているなら、`-' は、`0' に優先します。
- フィールド幅:
- フィールド幅 を指定するオプションの数値列。出力の文字列がフィールドの幅未満のバイトであるなら、フィールドの幅を補うために左に (または左詰め指示子が与えられたなら、右に) 空白でパディングさます (先導する 0 は、フラグですが、埋め込まれている 0 は、フィールドの幅の一部であることにことに注意してください)。
- 精度:
- オプションのピリオド‘ .’は、小数点の後ろに現れる桁の数を指定する 精度 を与えるか、または e と f 書式について、文字列から印刷されるバイトの最大数を与えるオプションの数値例が続きます。数値列が指定されないなら、精度は、0 として扱われます。
- 書式:
- 使用する書式のタイプを示す文字 ( diouxXfFeEgGaAcsb の 1 つ)。大文字の書式は、書式化プログラムの出力が全て大文字であることだけ、それらの小文字に対応するものと異なっています。浮動小数点の書式指示子 ( fFeEgGaA) は、利用可能であるなら、追加の精度が使用されることを要求するために L を前に付けることができます。
フィールドの幅または精度は、数値列の代わりに‘ *’を指定できます。この場合、 argument は、フィールドの幅または精度を供給します。
書式文字とそれらの意味は、次の通りです:
- diouXx
- argument は、それぞれ、符号付き 10 進数 (d または i)、符号なし 8 進数、符号なし 10 進数、または符号なしの 16 進数 (X または x) として印刷されます。
- fF
-
argument は、小数点以下の d の数値が引数のための精度指定と等しいスタイル `[-]ddd.ddd' で印刷されます。精度が指定されないなら、6 桁が与えられます。精度が明白に 0 であるなら、桁と小数点は、印刷されません。値 infinity と NaN は、それぞれ‘
inf
’と‘nan
’として印刷されます。 - eE
-
argument は、スタイル
e ‘[
- d.ddd± dd]’で印刷され、ここで、小数点の前に 1 桁と数値の後ろは、引数のための精度指定と等しいです。精度が指定されないとき、6 桁が作成されます。値 infinity と NaN は、それぞれ‘
inf
’と‘nan
’として印刷されます。 - gG
- argument は、最小の間隔で最大限の精度を与えるとしても、スタイル f ( F) またはスタイル e ( E) で印刷されます。
- aA
-
argument は、スタイル‘[
- h.hhh±
p
d]’で印刷され、ここで、 16 進小数点の前に 1 桁あり、数値の後ろは、引数のための精度指定と等しくなります。精度が指定されないとき、十分な桁が、引数の正確な倍精度浮動小数点表示を与えるために作成されます。値 infinity と NaN は、それぞれ‘inf
’と‘nan
’として印刷されます。 - c
- argument の最初のバイトが印刷されます。
- s
- 文字列 argument からのバイトは、終りに到達するまでか、または精度指定で示されたバイト数に到達するまで印刷されます。しかしながら、精度が 0 または指定されていなければ、文字列は、すべて印刷されます。
- b
- 文字列 argument でバックスラッシュ記法のエスケープ文字を解釈することを除いて、 s と同様です。許可されられたエスケープシーケンスは、8 進エスケープが \ num の代わりに \0 num であるという点でわずかに異なっています。
- %
- `%' を印刷します。引数は、使用されません。
小数点文字は、プログラムのロケール (カテゴリ LC_NUMERIC) で定義されます。
実在しないか、または小さなフィールドの幅の場合、フィールドの切り捨ては行われません。指定されたフィールドの幅が実際の幅を超えている場合にだけ、パディングが行われます。
いくつかのシェルは、このユーティリティと同様、または、同一の組み込みの printf コマンドを提供しています。 builtin(1) マニュアルページを調べてください。
終了ステータス
The printf utility exits 0 on success, and >0 if an error occurs.互換性
数値で始まらない数値書式の引数を最初の文字の ASCII コードに変換する伝統的な BSD の振る舞いは、サポートされません。規格
printf コマンドは、 IEEE Std 1003.2 (“POSIX.2”) 仕様と互換性があるはずです。警告
ANSI 16 進文字定数は、故意に提供されませんでした。最初の文字としてダッシュ ("-") を印刷しようと試みることによって、 printf は、プログラム引数としてダッシュを解釈します。 -- は、 format の前に使用されなければなりません。
ロケールが (UTF-8 のような) マルチバイト文字を含んでいるなら、精度が指定された c 書式および b と s 書式は、期待されるように動作しません。
バグ
浮動小数点は、 ASCII から浮動小数点に変換され、再び戻るので、浮動小数点の精度は、失われます。 (デフォルトで、数値は、印刷される前に、IEEE-754 倍精度値に変換されます。 L 修飾子は、ハードウェアプラットフォームによって追加の精度をもたらします。)エスケープシーケンス\000 は、文字列終端子です。 b 書式のための引数に存在しているとき、引数は、\000 文字で切り捨てられます。
マルチバイト文字は、書式の文字列で認識されません (これは、‘ %
’がマルチバイト文字の内側に現れる場合のみ、問題です)。
May 28, 2011 | FreeBSD |