printf
コマンドは、C言語の printf
関数と同様のフォーマット指定子を使って文字列を整形して出力 するためのコマンドです。echo
よりも制御が正確で、移植性が高く、スクリプトでの利用が推奨されます。
構文(Syntax)
printf FORMAT [ARGUMENT...]
主なフォーマット指定子
指定子 | 説明 | 使用例 | 出力例 |
---|---|---|---|
%s | 文字列 | printf "%s\n" "Hello" | Hello |
%d | 整数(10進数) | printf "%d\n" 42 | 42 |
%f | 浮動小数点数 | printf "%.2f\n" 3.14159 | 3.14 |
%x | 整数(16進数) | printf "%x\n" 255 | ff |
%o | 整数(8進数) | printf "%o\n" 8 | 10 |
%c | 文字コードを文字として出力 | printf "%c\n" 65 | A |
%% | % を出力 | printf "100%% complete\n" | 100% complete |
主なオプション
printf
は基本的にオプションがなく、フォーマット文字列で挙動を制御します。
フォーマット修飾子
%-N
: 左詰め%0N
: ゼロ埋め%N.M
: N桁幅、M桁小数点
例:
printf "%05d\n" 42
出力:
00042
実行例
文字列を出力
printf "Hello, %s!\n" "Alice"
出力:
Hello, Alice!
整数と浮動小数点数を整形
printf "Value: %d, Pi: %.3f\n" 42 3.14159
出力:
Value: 42, Pi: 3.142
ゼロ埋めで桁を揃える
printf "%04d\n" 7
出力:
0007
左詰めで出力
printf "%-10s %s\n" "Name" "Age"
printf "%-10s %s\n" "Alice" "25"
printf "%-10s %s\n" "Bob" "30"
出力:
Name Age
Alice 25
Bob 30
16進数として出力
printf "%x\n" 255
出力:
ff
改行を明示しない場合
printf "Hello"
printf "World"
出力:
HelloWorld
エラー例(引数不足)
printf "Name: %s, Age: %d\n" "Alice"
出力例:
Name: Alice, Age: 0
(足りない引数はデフォルトで 0
や空文字に置き換えられる)
関連コマンド
echo
: 簡易的に文字列を出力awk
: テキスト処理で整形出力に利用可能sed
: 文字列の変換や加工に利用可能
備考
echo
よりも環境差が少なく、POSIX に準拠したスクリプトではprintf
の利用が推奨されます。- 改行は自動では入らないため、必要に応じて
\n
を明示的に指定してください。 bash
など多くのシェルでは組み込みコマンドとして提供されています。
参考
- manページ: man7.org printf(1)
- POSIX printf: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html
コメント