はじめに

こんにちは!今回はprintfコマンドについて解説します。

printfは、フォーマットを指定して出力するコマンドです。C言語のprintfと同じような機能を持っていて、めっちゃ便利ですよ。

echoよりも柔軟な出力ができるので、スクリプトやログ出力で活躍します。

printfコマンドとは

printfは、指定されたフォーマット文字列に従って、整形されたテキストを出力する組み込みコマンドです。

主な特徴:

  1. フォーマット指定 - %d(整数)、%s(文字列)、%f(浮動小数点数)など
  2. エスケープシーケンス対応 - \n(改行)、\t(タブ)など
  3. パディング・精度制御 - 桁数や小数点以下の桁数を指定可能
  4. 複数引数対応 - 複数の値を一度にフォーマット出力

echoと違って改行を自動で入れないので、より細かい制御ができます。

基本構文

1
printf フォーマット文字列 [引数1] [引数2] ...

フォーマット文字列に%で始まる形式指定子を含めます。

主なオプション

フォーマット 説明
%s 文字列
%d 整数(10進数)
%x 16進数(小文字)
%X 16進数(大文字)
%f 浮動小数点数
%e 指数表記
%c 1文字
%% リテラルな%

パディング・精度:

形式 説明
%5s 5文字分の幅で右寄せ
%-5s 5文字分の幅で左寄せ
%05d 5桁の整数(0パディング)
%.2f 小数点以下2桁

使用例

例1: 基本的な文字列出力

1
printf "Hello, World!\n"

実行結果:

1
Hello, World!

最もシンプルな使い方。\nで改行します。

例2: 複数の値をフォーマット出力

1
printf "名前: %s, 年齢: %d\n" "太郎" 25

実行結果:

1
名前: 太郎, 年齢: 25

異なる型の値を同時に出力します。

例3: 浮動小数点数の精度指定

1
printf "円周率: %.2f\n" 3.14159

実行結果:

1
円周率: 3.14

小数点以下2桁で表示します。

例4: 16進数への変換

1
printf "10進数: %d, 16進数: %x\n" 255 255

実行結果:

1
10進数: 255, 16進数: ff

同じ値を異なる進数で表示します。

例5: 0パディング(ゼロ埋め)

1
printf "ID: %05d\n" 42

実行結果:

1
ID: 00042

5桁になるようゼロで埋めます。ファイル名や連番に便利。

例6: 右寄せ・左寄せ

1
printf "右: %10s, 左: %-10s\n" "ABC" "ABC"

実行結果:

1
右:        ABC, 左: ABC

幅を指定して配置します。テーブル出力に便利。

例7: 複数行の出力

1
printf "行1\n行2\n行3\n"

実行結果:

1
2
3
行1
行2
行3

複数の\nで改行を制御します。

例8: 複数の引数で繰り返し出力

1
printf "%s: %d\n" "りんご" 3 "みかん" 5 "バナナ" 2

実行結果:

1
2
3
りんご: 3
みかん: 5
バナナ: 2

フォーマット文字列が複数の引数に対して繰り返し適用されます。

例9: タブでの整列

1
printf "Name\tAge\tCity\n太郎\t25\t東京\n花子\t28\n京都\n"

実行結果:

1
2
3
Name Age City
太郎 25 東京
花子 28 京都

\tでタブを挿入。テーブルフォーマットに使えます。

例10: 変数を使った出力

1
2
3
name="ユーザー"
age=30
printf "ユーザー情報: %s (%d歳)\n" "$name" "$age"

実行結果:

1
ユーザー情報: ユーザー (30歳)

シェル変数をprintfの引数として使えます。

Tips・注意点

echoとの違い

1
2
3
4
5
6
# echo は自動で改行を加える
echo "Hello"    # Hello(改行あり)

# printf は明示的に指定
printf "Hello"  # Hello(改行なし)
printf "Hello\n" # Hello(改行あり)

printfのほうがより細かい制御ができます。

%記号をそのまま出力したい

1
printf "割引率: 20%%\n"

%%で1つの%を出力できます。

バッシュのprintf vs /usr/bin/printf

1
2
3
4
5
# builtin printf(シェル組み込み)
builtin printf "test\n"

# 外部コマンド
/usr/bin/printf "test\n"

通常はシェル組み込みが優先されます。

実践的な使い方

ログファイルへのタイムスタンプ付き出力

1
printf "[%s] プロセス開始\n" "$(date '+%Y-%m-%d %H:%M:%S')"

タイムスタンプ付きでログを出力。

CSVフォーマット生成

1
printf '"%s","%s",%d\n' "名前" "説明" 100

CSV形式でデータを出力。

テーブル出力

1
2
3
printf "%-15s | %10s | %8s\n" "コマンド" "説明" "難易度"
printf "%-15s | %10s | %8s\n" "cd" "ディレクトリ変更" "基本"
printf "%-15s | %10s | %8s\n" "grep" "テキスト検索" "中級"

カラム幅を指定してテーブルを作成。

バージョン番号のフォーマット

1
printf "バージョン: %d.%d.%d\n" 1 2 3

バージョン情報を統一的にフォーマット出力。

まとめ

printfコマンドのポイント:

  • 整形して出力するコマンド
  • %s: 文字列、%d: 整数、%f: 浮動小数点数
  • パディング: %5sで幅、%05dでゼロ埋め
  • 精度指定: %.2fで小数点以下2桁
  • 改行: \nを明示的に指定(echoと違う)
  • よく使う組み合わせ: printf "%s: %d\n", printf "%.2f\n"

echoより便利で、スクリプト内での出力をしっかり制御したい時に最適ですよ!