echo / printf
『echo』は文字列を標準出力に表示するコマンドです。『printf』はC言語の同名関数に似た書式指定付き出力ができ、改行の制御や数値の整形が可能です。
構文
echo [オプション] [文字列...] printf 書式 [引数...]
オプション・書式一覧
| コマンド / 書式 | 概要 |
|---|---|
| echo 文字列 | 文字列を表示して末尾に改行を出力します。 |
| echo -n 文字列 | 末尾の改行を出力しません。 |
| echo -e 文字列 | バックスラッシュエスケープを解釈します(\n・\t・\033[など)。 |
| echo $変数 | 変数の値を展開して表示します。 |
| printf "%s\n" 文字列 | 書式指定で文字列を出力します。 |
| printf "%d\n" 数値 | 整数として出力します。 |
| printf "%05d\n" 数値 | 5桁ゼロ埋めで出力します。 |
| printf "%.2f\n" 数値 | 小数点2桁で出力します。 |
| printf "%10s\n" 文字列 | 10文字幅で右詰め出力します。 |
| printf "%-10s\n" 文字列 | 10文字幅で左詰め出力します。 |
サンプルコード
『echo』で文字列を表示します。
echo "Hello, World!" Hello, World!
変数の値を展開して表示します。
greeting.sh
NAME="Alice" echo "Hello, $NAME!"
bash greeting.sh Hello, Alice!
『-n』オプションで末尾の改行を出力しません。プロンプト表示などに使います。
echo_n.sh
echo -n "Processing..." echo " done!"
bash echo_n.sh Processing... done!
『-e』オプションでエスケープシーケンスを解釈します。色付き出力ができます。
color.sh
echo -e "\033[32mSuccess!\033[0m" echo -e "\033[31mError!\033[0m"
bash color.sh Success! Error!
『printf』で書式指定付きの出力ができます。整数やゼロ埋めが可能です。
printf "%d\n" 42 42
ゼロ埋めで連番を出力します。ファイル名の生成などに便利です。
numbering.sh
for i in 1 2 3; do
printf "file_%03d.txt\n" $i
done
bash numbering.sh file_001.txt file_002.txt file_003.txt
なお、for 文はターミナルでも直接入力できます。『do』の後で Enter を押すと『> 』マークが表示され、これは「まだ入力が続く」というサインで、『done』を入力すると実行されます。
for i in 1 2 3; do
printf "file_%03d.txt\n" $i
done
file_001.txt
file_002.txt
file_003.txt
『printf』でテーブル形式の整形出力をします。『%-10s』は左詰め10文字幅、『%5d』は右詰め5文字幅です。
table.sh
printf "%-10s %5s\n" "Name" "Score" printf "%-10s %5d\n" "Alice" 95 printf "%-10s %5d\n" "Bob" 87
bash table.sh Name Score Alice 95 Bob 87
概要
移植性を重視するスクリプトでは『$ echo -e』よりも『$ printf』を使うことが推奨されます。『$ echo -e』の動作はシェルや実装によって異なる場合がありますが、『$ printf』はPOSIX標準で動作が保証されています。
標準入力から行を読み取るには『read』を使います。出力をファイルに書き込むには『リダイレクト(>)』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。