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 公式マニュアルも参考にしてください。




