No.007シェル
printf
プリントエフ・書式付き出力
書式指定子を使って文字列、数値、改行、タブなどを正確に出力します。移植性の高いシェルスクリプトではechoよりprintfを優先する場面が多くあります。
答えよく使う形
$ printf "%sn" "hello"
hello
$ printf "dn" 7
0007
$ printf "%st%sn" key value
練習用の部屋です。何を打っても本物は変わりません。本物の Linux で続ける →
覚える順番の中でLPIC-1・43 駅め / 106
どんなコマンド?
改行、タブ、桁数、ゼロ埋め、列揃え、複数行整形など、出力形式を正確に制御したい時に使います。
printfは、C言語のprintf関数に似た書式で出力を制御できるコマンドです。改行を付けるかどうか、数値を何桁で表示するか、文字列を整列させるかを細かく指定できます。
シェルスクリプトでは、echoよりもprintfのほうが挙動が読みやすく、移植性を確保しやすいという利点があります。特に改行抑制、タブ出力、ゼロ埋め、固定幅整形、CSV風の安定出力で差が出ます。
書き方とオプション
組み立ててみるオプションを押すと、下の1行に足されます。もう一度押すと外れます。
$ printf
使用例と実行結果
行を押すとコピーできます。
hello
0007
まず安全に試す
3分ミッション
手を動かすと覚えやすくなります。できたものに印を付けてください(この端末に残ります)。
0 / 1
つまずいたとき
printf "$user_input"として書いてしまった
原因入力文字列が書式として解釈されます。
こうするprintf "%s" "$user_input"のように、書式を固定します。
echoと同じ感覚で自動改行されると思った
原因printfは自動で改行しません。
こうする必要なら書式へnを明示します。
終わったときの数(戻り値)
$ echo $?
- 0正常終了しました。
- >0書式や数値変換に問題があり、一部処理でエラーが発生しました。
気をつけることと入れ方
書式文字列へ外部入力をそのまま渡すと、%解釈により意図しない出力になります。ユーザー入力は原則として引数側へ渡し、書式は固定文字列で書きます。
シェル(bash など)に組み込まれたコマンドです。入れるものはありません。
環境による違い
POSIXはprintfを標準化しており、echoよりも移植性の高い出力制御手段として使えます。GNU coreutils版には拡張もありますが、移植性重視なら基本的な変換指定子を使うのが安全です。
確かめた環境Debian GNU/Linux / 13 / Bash 5.2.372026-04-09 に確認
よくある質問
echoよりprintfを勧められるのはなぜですか。
改行やエスケープの扱いを明示でき、移植性と再現性が高いからです。
資格試験では
- LinuC レベル1大事1.03.1 コマンドラインの操作
- LPIC-1大事105.1 シェル環境のカスタマイズと利用
- 共通基礎大事Linuxコマンド基礎
printf を最後まで読みました。
Linux コマンド辞典に戻る85 / 144