Linux / コマンド / printf - 指定した形式で値を出力

printf は、値の並べ方や幅を指定する書式文字列に従って、文字列と数値を出力します。echoよりも改行と列幅を明確に制御できるため、シェルスクリプトで便利です。

Bashではprintfがシェル組み込みコマンドであり、GNU Coreutilsの外部printfも存在する可能性があります。実行される実装は typeコマンド で type printf として確認できます。自動改行がないため、必要に応じて書式文字列に\nを入れます。

基本的な文法

printf 'フォーマット文字列' [値 ...]

Bash組み込みの説明は help printf で確認します。man printf は外部コマンドなど別の実装を説明する場合があるため、どちらを実行しているかを先に確認してください。

使用例

文字列と改行

%sの位置に値を入れ、\nで行を終えます。

printf 'Hello, %s\n' Linux

列幅合わせ

左揃え幅と数字幅を決めて簡単な表を作ります。

printf '%-12s %5d\n' apple 42

複数の値を繰り返し出力

書式文字列は残りの引数に繰り返し適用されます。

printf '%s\n' one two three

書式文字列と実際の出力を比較する

printfは書式指定子に引数を順番に挿入します。%-6sは文字列を左寄せにして幅6で表示し、%03d は整数を最小幅3で0(ゼロ)埋めします。3桁を超える数値を切り捨てる指定ではありません。

printf '[%-6s] [%03d]\n' apple 7

例の出力:

[apple ] [007]

書式文字列の末尾の\nは改行です。echoとは異なり、printfは改行を自動で付けないので、必要に応じて明示してください。ユーザー入力を書式文字列の位置に直接入れると、%やバックスラッシュが解釈される可能性があるため、printf '%s\n' "$value"のように固定書式を使用します。

主なオプションと形式

オプション・形式 説明
%s 値を文字列として出力します。
%d 整数を10進数で出力します。
%f 実数を指定した精度で出力します。
\n 書式文字列内で改行を表します。
%-Ns 文字列を最小幅Nで左揃えにします。長い値を切り詰める指定ではありません。

使用する際の注意点

ユーザー入力を書式文字列自体として渡すと、% 指定が解釈されます。安全に値を出力するには、printf '%s\n' "$value" のように固定された形式を使用してください。シェル変数は引用して、空白やワイルドカードの展開を防ぎます。

よくある質問

printf は echo のように末尾に改行を自動で付加しますか?

いいえ。行を変えるには、\n を書式文字列に直接入れる必要があります。

公式ドキュメント

オプションの正確な動作や実装による違いは、printf に関する公式ドキュメントで確認できます。

外部コマンドの動作は GNU Coreutils 公式マニュアルも参考にしてください。