概要
書式指定子を使って文字列、数値、改行、タブなどを正確に出力します。移植性の高いシェルスクリプトではechoよりprintfを優先する場面が多くあります。
基本構文
printf 書式 [引数 ...]詳細解説
printfは、C言語のprintf関数に似た書式で出力を制御できるコマンドです。改行を付けるかどうか、数値を何桁で表示するか、文字列を整列させるかを細かく指定できます。
シェルスクリプトでは、echoよりもprintfのほうが挙動が読みやすく、移植性を確保しやすいという利点があります。特に改行抑制、タブ出力、ゼロ埋め、固定幅整形、CSV風の安定出力で差が出ます。
このコマンドを使う場面
改行、タブ、桁数、ゼロ埋め、列揃え、複数行整形など、出力形式を正確に制御したい時に使います。
まず安全に試す方法
1. printf "%sn" Linux
2. printf "dn" 7
3. printf "%st%sn" name value
3分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
printf "%s"とprintf "%sn"の違いを確認します。
資格試験との関連
-
LinuC レベル1
範囲: 1.03.1 コマンドラインの操作根拠: officialLinuCレベル1では、コマンドライン操作やシェル環境の理解が問われます。printfはその基礎を支える代表的なコマンドです。
-
LPIC-1
範囲: 105.1 シェル環境のカスタマイズと利用根拠: officialLPIC-1では、シェル環境、変数、履歴、コマンド解決の理解が重視されます。printfはその周辺知識と一緒に学ぶ価値が高いコマンドです。
-
共通基礎
範囲: Linuxコマンド基礎根拠: editorial試験横断で、printfはコマンドライン操作、手順読解、トラブルシュートの基礎体力を作る項目です。
実行結果サンプル
-
printf "%sn" "hello"hello -
printf "dn" 70007
戻り値コード
- 0 正常終了しました。
- >0 書式や数値変換に問題があり、一部処理でエラーが発生しました。
使用例
printf "%sn" "hello"printf "dn" 7printf "%st%sn" key valueprintf "%b" "line1nline2n"
よくあるエラー
-
printf "$user_input"として書いてしまった 原因: 入力文字列が書式として解釈されます。対処: printf "%s" "$user_input"のように、書式を固定します。
-
echoと同じ感覚で自動改行されると思った 原因: printfは自動で改行しません。対処: 必要なら書式へnを明示します。
導入・互換性情報
POSIXはprintfを標準化しており、echoよりも移植性の高い出力制御手段として使えます。GNU coreutils版には拡張もありますが、移植性重視なら基本的な変換指定子を使うのが安全です。
- Debian GNU/Linux / 13 / Bash 5.2.37
注意点 / セキュリティリスク
書式文字列へ外部入力をそのまま渡すと、%解釈により意図しない出力になります。ユーザー入力は原則として引数側へ渡し、書式は固定文字列で書きます。
FAQ
-
Q. echoよりprintfを勧められるのはなぜですか。 A. 改行やエスケープの扱いを明示でき、移植性と再現性が高いからです。
関連用語
参照リンク
- カテゴリー: Shell And Cli
- シェル依存: Posix Sh
- レベル: Basic
- 対応試験: LinuC, LinuC レベル1, LPIC, LPIC-1, 共通基礎