printf コマンド
目的
フォーマットされた出力を書き出します。
構文
printf 書式[引数 ... ]
説明
printf コマンドは、Argument パラメーターを変換してフォーマットし、標準出力へ書き出します。 Argument パラメーターは Format パラメーターの制御下でフォーマットされます。 フォーマットされた出力行の長さは、LINE_MAX バイトを超えることはできません。
以下の環境変数が、printf コマンドの実行に影響します。
| 項目 | 説明 |
|---|---|
| LANG | LC_ALL および対応する環境変数 (LC_ で始まる変数) の両方にロケールが指定されていない場合、ロケール・カテゴリーに使用するロケールを決定します。 |
| LC_ALL | LANG やそのほかの LC_ 環境変数の設定で指定されたロケール・カテゴリーの値を上書きするために使用するロケールを決定します。 |
| LC_CTYPE | テキスト・データのバイト・シーケンスを文字として解釈するためのロケールを決定します。例えば、パラメーター中の単一バイト対マルチバイト文字です。 |
| LC_MESSAGES | メッセージを書き出す際の言語を決めます。 |
| LC_NUMERIC | 数値フォーマット設定のロケールを決定します。 この環境変数は、e、E、f、g、 および G 変換文字を使用して書き出される数字のフォーマットに影響します。 |
Format パラメーターは、以下の 3 種類のオブジェクトを含む文字列です。
- 出力ストリームにコピーされたプレーン文字。
- 変換指定のそれぞれは、値パラメータリストから0個以上の項目を検索させる。
- 以下のエスケープシーケンス。 出力ストリームへコピーされるとき、これらのシーケンスによって、
関連するアクションがそのアクションを行えるデバイスに表示されます。
項目 説明 \\ 円記号 \a アラート \b バックスペース \f 用紙送り \n 改行 \r 復帰 \t タブ \v 垂直タブ \ddd ddd は 1 桁、2 桁、または 3 桁の 8 進数。 これらのエスケープ・シーケンスは、8 進数で指定した数値を持つバイトとして表示されます。
Argument パラメーターは、Format パラメーターの制御下で標準出力へ書き出される 1 文字列または複数文字列のリストです。
Format パラメーターは、Argument パラメーターを満たすのに必要な回数だけ繰り返し使用されます。 余分な'c 議論または's変換指定は、あたかもヌル文字列'議論が与えられたかのように評価される。 Format パラメーターに変換指定がなく、Argument パラメーターが存在している場合は、その結果は不定になります。
Format パラメーターでの各変換指定の構文および指定順序は以下のとおりです。
- %(パーセント記号)。
- 変換指定の意味を変更するゼロ個以上のオプション。 オプションの文字と意味は、以下のとおりです。
項目 説明 - 変換の結果は、フィールド内に左詰めされます。 + 符号付き変換の結果は、常に記号 (+ または -) で始まります。 ブランク 符号付き変換の最初の文字が記号でない場合、結果の前にブランクが入ります。 ブランクと + の両方のオプション文字が表示されたときには、ブランクのオプション文字が無視されます。 # このオプションでは、値が代替フォーマットに変換されるように指定します。 c、d、i、u、sの変換では、このオプションは何の効果もない。 O変換では、結果の最初の桁を強制的に0(ゼロ)にするために精度を上げる。 xと Xの変換では、0でない結果には、それぞれ0xまたは0Xが先頭に付く。 e、E、f、g、Gの変換では、基数文字の後に桁が続かなくても、結果は常に基数文字を含みます。 g および G 変換の場合、通常の場合と同様に、後続のゼロが結果から除去されることはありません。 0 d、i、o、u、x、e、E、f、g、およびGの変換では、(符号や基数の指示の後に続く)先頭のゼロがフィールド幅にパッドするために使われ、スペースのパッドは行われない。 0 (ゼロ) および - (負符号) オプションが表示された 場合、0 (ゼロ) オプションは無視されます。 d,i,o,u,x,X変換では,精度が指定されている場合,0(ゼロ)オプションは無視される。 注: その他の変換の場合、動作は未定義です。 - 最小フィールド幅を指定するオプションの10進数文字列。 変換された値の文字数がフィールド幅より少ない場合、 フィールド幅で指定された長さになるようにフィールドの左側が埋め込まれます。 左調整のオプションを指定している場合には、フィールドの右側が埋め込まれます。 変換結果の文字数がフィールド幅より長い場合には、フィールドが拡張されて、 変換された結果が入るようにします。 切り捨ては行われません。 ただし、精度が高い場合、右側の切り捨てが行われることがあります。
- オプションの精度。 精度は. (ドット)の後に10進数文字列が続く。 精度を指定しない場合には、0 (ゼロ) として扱われます。 精度によって以下のものが指定されます。
- 適用される変換のタイプを示す文字:
項目 説明 % 変換を行いません。 % (パーセント記号) を表示します。 a, A これは、浮動小数点値を受け入れ、値をフォーマット [-]0xh.hhhhp±dの 10 進表記に変換します。 10 進表記には、小数点の前に 1 桁の 16 進数字が含まれます。 この 16 進数字は、指定された浮動小数点値が、正規化された浮動小数点値であるか、または浮動小数点値が指定されていない場合は、ゼロ以外の値でなければなりません。 小数点以下の 16 進数字の数は精度値を示します。 この精度値が Format パラメーターで指定されていない場合に、FLT_RADIX 引数の指数値が 2 であると、精度値は浮動小数点値を表します。 精度値が指定されていない場合に、FLT_RADIX 引数の指数値が 2 でなければ、a, A 変換指定子で使用される内部表現フォーマットで異なる浮動小数点値を精度値で区別できます。 10 進表記における後続ゼロは削除してかまいません。 精度値が0で#フラグが指定されていない場合、小数点は表示されない。 文字列abcdefは a 変換指定子に使用され、文字列ABCDEFは A 変換指定子に使用されます。 A変換指定子は、文字xとpの代わりに文字XとPを持つ数値を提供する。 2 の 10 進指数を表すには、FLT_RADIX 引数の指数に、1 桁から必要な桁数までの数字が含まれている必要があります。 浮動小数点値がゼロの場合は、指数値もゼロです。 無限大データ型または NaN データ型を表す浮動小数点値は、f, F 変換指定子のフォーマットに変換されます。d, i 整数値を受け取り、それを符号付き 10 進表記に変換します。 精度は、表示する最小桁数を指定します。 変換対象の値をそれより少ない桁数で表現できる場合には、値の先頭にゼロが付けられて拡張されます。 デフォルトの精度は 1 です。 ゼロ精度のゼロ値を変換した結果は、ヌル・ストリングです。 ゼロを先行文字としてフィールド幅を指定すると、 フィールド幅の値になるように先頭にゼロが埋め込まれます。 O 整数値を受け取り、それを符号付き 8 進表記に変換します。 精度は、表示する最小桁数を指定します。 変換対象の値をそれより少ない桁数で表現できる場合には、値の先頭にゼロが付けられて拡張されます。 デフォルトの精度は 1 です。 ゼロ精度のゼロ値を変換した結果は、ヌル・ストリングです。 ゼロを先行文字としてフィールド幅を指定すると、 フィールド幅の値になるように先頭にゼロが埋め込まれます。 フィールド幅の 8 進数値は暗黙指定されません。 u 整数値を受け取り、それを符号なし 10 進表記に変換します。 精度は、表示する最小桁数を指定します。 変換対象の値をそれより少ない桁数で表現できる場合には、値の先頭にゼロが付けられて拡張されます。 デフォルトの精度は 1 です。 ゼロ精度のゼロ値を変換した結果は、ヌル・ストリングです。 ゼロを先行文字としてフィールド幅を指定すると、 フィールド幅の値になるように先頭にゼロが埋め込まれます。 x, X 整数値を受け取り、それを 16 進表記に変換します。 x 変換には文字 abcdef が、X 変換には文字 ABCDEF が使用されます。精度は、表示する最小桁数を指定します。 精度は、表示する最小桁数を指定します。 変換対象の値をそれより少ない桁数で表現できる場合には、値の先頭にゼロが付けられて拡張されます。 デフォルトの精度は 1 です。 ゼロ精度のゼロ値を変換した結果は、ヌル・ストリングです。 ゼロを先行文字としてフィールド幅を指定すると、 フィールド幅の値になるように先頭にゼロが埋め込まれます。 f,F 浮動小数点値を受け取り、[-] ddd.ddd形式で10進数表記に変換する。基数文字または小数点以下の桁数は,指定された精度値に等しい。 LC_NUMERIC ロケール・カテゴリーは、このフォーマットで使用されなければならない基数文字を決定します。 精度値が浮動小数点値から削除されると、出力において基数文字の後に 6 桁の数字が追加されます。 精度値が 0 (ゼロ) の場合、基数文字は表示されません。 無限大データ・タイプを表す浮動小数点値は、[-]infまたは[-]infinityの形式に変換されます。[-]infまたは[-]infinityの形式は、インプリメンテーションに依存します。 NaN データ型を表す浮動小数点値は、フォーマット[-]nan(n-char-sequence) または[-]nanに変換されます。 n-char-sequence の意味は実装環境に依存します。 F 変換指定子は、フォーマットinf、infinity、nanではなく、INF、INFINITY、またはNANを提供します。e, E 浮動小数点値または倍精度値を受け取り、それを指数フォーマット [-] d.dde{+|-}dd に変換します。 基数文字 (ここでは小数点として示される) の前には 1 桁あり、基数文字の後の桁数は精度指定と同じです。 LC_NUMERIC ロケール・カテゴリーは、このフォーマットで使用する基数文字を決定します。 精度を指定しない場合には、6 桁が出力されます。 精度が 0 (ゼロ) の場合は、 基数文字は表示されません。 E 変換文字は、指数の前に e ではなく E を付けた数字を置きます。 指数には少なくとも 2 桁が必ず含まれます。 ただし、表示される値が 2 桁を超える指数を必要とする場合には、 付加指数桁が必要に応じて表示されます。 g,G floatまたはdouble値を受け取り、fまたはe変換文字(G変換の場合はE)のスタイルで、有効桁数を指定する精度で変換する。 後ろのゼロは、結果から取り除かれます。 基数文字は、その後ろに数字が続く場合のみ表示されます。 使用されるスタイルは、変換される値によって左右されます。 スタイル g の結果が出されるのは、変換から生じた指数が -4 より小さい場合か、または精度以上である場合に限られます。 C 値を文字列として受け取り、その文字列の最初の文字を表示します。 s 値を文字列として受け取り、文字列の終わりに達するまでか、または精度によって示された文字数に達するまで、文字列から文字を表示します。 精度を指定しない場合には、最初の null 文字までのすべての文字が表示されます。 b 値を円記号エスケープ・シーケンスを含む可能性のある文字列として受け取ります。 文字列の最後に達するまで、あるいは精度指定によって示されたバイト数に達するまで、 変換された文字列からのバイトが表示されます。 精度を省略した場合には、最初の null 文字までのすべてのバイトが表示されます。
以下の円記号エスケープ・シーケンスがサポートされます。
- 上記のFormatパラメータの説明で挙げたエスケープシーケンス。 各エスケープ・シーケンスは、それが表現する個々の文字に変換されます。
- シーケンス。これは表示されず、printfコマンドはこれを含む文字列パラメー タ内の残りの文字、残りの文字列パラメータ、およびFormatパラメータ内の 追加文字を無視する。
終了状況
このコマンドは、以下の終了値を戻します。
| 項目 | 説明 |
|---|---|
| 0 | 正常終了。 |
| >0 | エラーが発生しました。 |
例
- 以下のコマンドを入力する:
以下の出力が作成されます。printf "%5d%4d\n" 1 21 321 4321 54321
指定した文字列すべてを表示するために、Format パラメーターが 3 回使用されています。 0(ゼロ)は、printfコマンドが最後の%4d変換仕様。1 21 3214321 54321 0 - 以下のコマンドを入力する:
以下の出力が作成されます。printf "%c %c\n" 78 797 7 - 以下の例は、%$ フォーマット指定子をどのように使用すれば
引数の順序とは異なる順序で日付を印刷できるかを示します。
printf (""%1$s, %3$d. %2$s, %4$d:%5$.2d", weekday, month, day, hour, min); Sunday, 3. July, 10:02 (weekday, day. month, hour:min)
ファイル
| 項目 | 説明 |
|---|---|
| /usr/bin/printf | printf コマンドが入っています。 |