Linux printf コマンド

Linux コマンド大全


一、printf コマンド概要

printf は Linux/Unix システムにおける強力なフォーマット出力コマンドで、C 言語の printf() 関数に由来します。echo コマンドと比較して、printf はより正確な出力制御とフォーマット機能を提供します。

主な特徴

  • 正確なフォーマット:出力の配置、幅、精度などを制御できます
  • 自動改行なし:デフォルトでは出力末尾に改行文字を追加しません(echo とは異なります)
  • 多言語サポート:Unicode 文字の出力をサポートします
  • 変数の挿入:文字列内に変数の値を挿入できます

二、基本構文

printf format-string [arguments...]

パラメータ説明

  • format-string:書式文字列。通常の文字と書式指定子を含みます
  • arguments:書式指定子に対応するパラメータのリスト

三、書式指定子の詳細

書式指定子は%で始まり、基本形式は次のとおりです:

%[flags][width][.precision]specifier

よく使う書式指定子

指定子 説明 例
%s 文字列 printf "%s" "hello"
%d 10進整数 printf "%d" 123
%f 浮動小数点数 printf "%f" 3.14
%x 16進整数(小文字) printf "%x" 255
%X 16進整数(大文字) printf "%X" 255
%o 8進整数 printf "%o" 8
%c 単一の文字 printf "%c" 65

修飾子オプション

1. フラグ

フラグ 説明 例
- 左揃え printf "%-10s" "hi"
+ 正負の符号を表示 printf "%+d" 123
0 ゼロで埋める printf "%05d" 12
空白 正数の前に空白を残す printf "% d" 123
# 特殊な形式(0xプレフィックスなど) printf "%#x" 255

2. 幅

最小フィールド幅を指定し、不足する場合は埋めます

例

printf "%10s\n" "hello"  # 右揃え、幅10
printf "%-10s\n" "hello" # 左揃え、幅10

3. 精度(.precision)

浮動小数点数の場合、小数点以下の桁数を指定します。文字列の場合、最大文字数を指定します。

例

printf "%.2f\n" 3.14159  # 3.14 を出力
printf "%.5s\n" "abcdefg" # abcde を出力

四、実用的な例

例1:基本的なフォーマット出力

例

printf "Name: %s, Age: %d, Height: %.2f\n" "Alice" 25 1.68

出力:

Name: Alice, Age: 25, Height: 1.68

例2:テーブルの整列出力

例

printf "%-10s %-10s %-10s\n" "Name" "Age" "Score"
printf "%-10s %-10d %-10.2f\n" "Alice" 25 89.5
printf "%-10s %-10d %-10.2f\n" "Bob" 23 92.3

出力:

Name       Age        Score     
Alice      25         89.50     
Bob        23         92.30     

例3:特殊文字の処理

例

printf "Temperature: %d°C\n" 25
printf "Path: %s\n" "/home/user"
printf "Alert: \a\n"  # ベル文字

例4:変数の挿入

例

name="John"
age=30
printf "User: %s, %d years old\n" "$name" "$age"

五、高度な使い方

1. 日付のフォーマット出力

例

printf "Today is %(%Y-%m-%d)T\n" -1

2. 色の出力

例

printf "\e[31mRed Text\e[0m\n"
printf "\e[32mGreen Text\e[0m\n"

3. 動的に幅を指定

例

width=20
printf "%*s\n" $width "Right aligned"

六、よくある問題と注意点

改行の問題:printf はデフォルトで改行文字を追加しないため、手動で追加する必要があります\n

例

printf "No newline"
printf "Add newline\n"

パラメータ数の不一致:パラメータが書式指定子より少ない場合、未定義の値が出力されます

例

printf "%s %s\n" "only_one"  # 2番目の%sは空を出力します

引用符の処理:書式文字列はダブルクォートで囲み、変数もダブルクォートで囲むことをお勧めします

例

printf "%s\n" "$variable"

特殊文字のエスケープ:書式文字列内でバックスラッシュを使用して特殊文字をエスケープする必要があります


七、printf vs echo

特性 printf echo
改行 \n を明示的に追加する必要あり 自動で追加
フォーマット 複雑なフォーマットをサポート 簡単な出力
一貫性 各システムで動作が一貫 システムによって差異がある可能性
変数展開 明示的に指定する必要あり 自動で展開
特殊文字 エスケープが必要 一部のバージョンは -e オプションをサポート

Linux コマンド大全

その他の拡張