No.007シェル

printf

プリントエフ・書式付き出力

知識レベル 基礎安全に試せる一般ユーザーで使えるシェルに組み込み

書式指定子を使って文字列、数値、改行、タブなどを正確に出力します。移植性の高いシェルスクリプトではechoよりprintfを優先する場面が多くあります。

答えよく使う形

  1. 最も基本的な安全な文字列出力です
  2. ゼロ埋めで桁数をそろえます
  3. 文字列としてそのまま出力します
visitor@goodly: ~

$ printf "%sn" "hello"

hello

$ printf "dn" 7

0007

$ printf "%st%sn" key value

覚える順番の中で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

Goodly のメニュー