概要
`printf`はフォーマット文字列と引数を使用して出力を精密に制御します。これはスクリプトでのレポート生成、ログメッセージのフォーマットなど、様々な用途に活用されます。
主な特徴
- 多様なフォーマット指定子をサポート (%s, %d, %f など)
- エスケープシーケンスをサポート (\n, \t, \x など)
- 整数、浮動小数点数、文字列などのデータ型別出力
- 出力幅、精度、配置の制御が可能
主なオプション(フォーマット指定子およびエスケープシーケンス)
`printf`コマンドは、伝統的な`-`で始まるオプションよりも、フォーマット文字列内に含まれる「フォーマット指定子」と「エスケープシーケンス」を通じて動作を制御します。以下はよく使われるものです。
フォーマット指定子
エスケープシーケンス
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`printf` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
様々なフォーマット指定子とエスケープシーケンスを活用した`printf`の使用例です。
基本的な文字列出力
printf "Hello, World!\n"
簡単な文字列を出力して改行します。
整数と文字列の混合出力
printf "名前: %s, 年齢: %d歳\n" "홍길동" 30
整数と文字列を組み合わせてフォーマットして出力します。
浮動小数点数の精度指定
printf "円周率: %.2f\n" 3.141592
浮動小数点数を小数点以下2桁まで出力します。
出力幅と配置
printf "%-10s %5d\n" "商品名" 123
文字列を10文字幅で左寄せ、整数を5文字幅で右寄せします。
16進数および8進数出力
printf "10進数: %d, 16進数: %x, 8進数: %o\n" 255 255 255
数値を16進数と8進数で出力します。
変数との併用
NAME="김철수"
SCORE=95
printf "学生: %s, 点数: %d点\n" "$NAME" "$SCORE"
シェル変数を`printf`の引数として使用して出力します。
ヒントと注意点
`printf`を効果的に使用するためのヒントと注意点です。
`echo`との違い
`echo`は主に簡単な文字列出力に使用され、エスケープシーケンスの解釈(`-e`オプションが必要)やフォーマット指定に制限があります。一方、`printf`はフォーマット指定子を通じて出力形式を精密に制御でき、エスケープシーケンスを常に解釈します。
- エスケープシーケンス: `printf`は常にエスケープシーケンスを解釈します。`echo`は`-e`オプションが必要です。
- フォーマット指定: `printf`は`%s`、`%d`など多様なフォーマット指定子をサポートし、出力形式を細かく制御できます。`echo`にはこの機能はありません。
- 改行: `echo`はデフォルトで出力後に改行しますが、`printf`は`\n`を明示的に指定する必要があります。
フォーマット文字列と引数の整合性
フォーマット文字列のフォーマット指定子の数と提供される引数の数が一致する必要があります。引数が不足した場合、シェルによってはデフォルト値(例: 0または空文字列)が使用される可能性があり、引数が多すぎる場合は超過した引数は無視されます。これは予期しない結果を招く可能性があるため注意が必要です。
エスケープシーケンス使用時の注意
特に`\`文字を出力するには、`\\`のように二重に使用する必要があります。シェルが先にバックスラッシュを解釈する可能性があるため、`printf`に渡される前にエスケープ処理が必要な場合があります。一般的に、フォーマット文字列をダブルクォーテーション("")で囲むのが安全です。