メインコンテンツへスキップ
初級8分で読める

echoコマンドの完全ガイド

Linuxのechoコマンドを完全マスター。変数展開、エスケープシーケンス、色付き出力など、基本から応用まで詳しく解説します。

基礎編echo出力変数展開エスケープシーケンス初心者向け

echoコマンドとは

echoコマンドは、指定されたテキストを標準出力に表示する最も基本的なコマンドの一つです。単純そうに見えますが、実は多くの機能を持っており、シェルスクリプトやコマンドライン作業で幅広く活用されています。

基本的な使い方

最もシンプルな使い方は、テキストを表示することです。

$ echo "Hello, World!"
Hello, World!

# 引用符なしでも使える(単語間のスペースは1つにまとめられる)
$ echo Hello    World
Hello World

echoは文字列を表示する最も基本的なコマンドです。でも、実はとっても奥が深いんですよ!一緒に楽しく学んでいきましょう!

引用符の違いを理解する

ダブルクォート(")vs シングルクォート(')

# ダブルクォート: 変数展開される
$ name="Linux"
$ echo "Hello, $name"
Hello, Linux

# シングルクォート: 文字列がそのまま表示される
$ echo 'Hello, $name'
Hello, $name

ダブルクォートは変数を展開し、シングルクォートは文字列をそのまま表示します。お料理で言えば、ダブルクォートは「調味料を加える」、シングルクォートは「素材そのまま」という感じですね!

バッククォート(`)とコマンド置換

# バッククォートまたは$()でコマンドの実行結果を埋め込める
$ echo "現在の日時: `date`"
$ echo "現在の日時: $(date)"

# ファイル数をカウント
$ echo "現在のディレクトリには $(ls | wc -l) 個のファイルがあります"

$(コマンド)`コマンド`(バッククォート)を使うと、コマンドの実行結果を文字列に埋め込めます。まるで魔法のようですね!

特殊文字とエスケープシーケンス

-eオプションでエスケープシーケンスを有効化

# 改行(\n)
$ echo -e "1行目\n2行目\n3行目"
1行目
2行目
3行目

# タブ(\t)
$ echo -e "名前\t年齢\t職業"
名前    年齢    職業

# バックスペース(\b)
$ echo -e "Hello\b\b\b\bGood"
Good

-eオプションを使うと、\n(改行)や\t(タブ)などの特殊文字を解釈してくれます。文章に「段落」や「インデント」を付けるような感覚ですね!

よく使うエスケープシーケンス一覧

| シーケンス | 意味 | 例 | |-----------|------|-----| | \n | 改行 | echo -e "行1\n行2" | | \t | タブ | echo -e "列1\t列2" | | \\ | バックスラッシュ | echo -e "C:\\Users" | | \" | ダブルクォート | echo -e "彼は\"こんにちは\"と言った" | | \a | ベル(音) | echo -e "\a警告!" | | \r | キャリッジリターン | echo -e "ABC\rXY" → XYC |

色付き出力(ANSIエスケープコード)

基本的な色の使い方

# 赤色のテキスト
$ echo -e "\033[31m赤色のテキスト\033[0m"

# 背景色を変える
$ echo -e "\033[42m緑色の背景\033[0m"

# 太字
$ echo -e "\033[1m太字のテキスト\033[0m"
# 色付きのテキスト例
echo -e "\033[31m● エラー: 赤色のテキスト\033[0m"
echo -e "\033[32m✓ 成功: 緑色のテキスト\033[0m"
echo -e "\033[33m⚠ 警告: 黄色のテキスト\033[0m"

ANSIエスケープコードを使えば、カラフルな出力が作れます!エラーは赤、成功は緑など、視覚的にわかりやすくできますね。

色コード一覧

# 文字色
30: 黒   31: 赤   32: 緑   33: 黄
34: 青   35: 紫   36: 水色  37: 白

# 背景色
40: 黒   41: 赤   42: 緑   43: 黄
44: 青   45: 紫   46: 水色  47: 白

# スタイル
0: リセット  1: 太字  4: 下線  7: 反転

変数展開の高度な使い方

変数のデフォルト値

# 変数が未定義の場合のデフォルト値
$ echo "${name:-ゲスト}さん、こんにちは"
ゲストさん、こんにちは

# 変数の長さを取得
$ text="Hello"
$ echo "文字数: ${#text}"
文字数: 5
# 変数のデフォルト値
echo "名前: ${name:-ゲスト}"  # nameが未定義なら「ゲスト」

# 文字列の長さ
text="Hello"
echo "文字数: ${#text}"  # 5と表示される

${変数:-デフォルト値}は、変数が空の時にデフォルト値を使う便利な書き方です。お客様の名前がわからない時に「お客様」と呼ぶような感じですね!

配列の展開

# 配列の要素を表示
$ fruits=("りんご" "バナナ" "オレンジ")
$ echo "最初の果物: ${fruits[0]}"
$ echo "すべての果物: ${fruits[@]}"
$ echo "果物の数: ${#fruits[@]}"

出力の制御

改行なしで出力(-nオプション)

# 改行なしで出力
$ echo -n "処理中..."
$ sleep 2
$ echo "完了!"
処理中...完了!
# -nオプションで改行なし出力
echo -n "処理中..."
sleep 2
echo "完了!"
# 出力: 処理中...完了!

-nオプションを使うと改行なしで出力できます。プログレス表示などで、同じ行に追記したい時に便利です!

複数行の出力

# ヒアドキュメントスタイル
$ echo "設定ファイルの内容:
> host=localhost
> port=8080
> debug=true"

# printfスタイルの書式
$ printf "%-10s %5d円\n" "りんご" 100
$ printf "%-10s %5d円\n" "バナナ" 80
# printfで整形された出力
printf "%-10s %5d円\n" "りんご" 100
printf "%-10s %5d円\n" "バナナ" 80
# 出力:
# りんご     100円
# バナナ      80円

printfはechoより高度な書式設定ができます。表形式のデータを綺麗に揃えたい時に重宝しますよ!

実践的な活用例

プログレスバーの作成

#!/bin/bash
# シンプルなプログレスバー
for i in {1..20}; do
    echo -ne "\r処理中: ["
    for ((j=0; j<i; j++)); do echo -n "#"; done
    for ((j=i; j<20; j++)); do echo -n " "; done
    echo -n "] $((i*5))%"
    sleep 0.1
done
echo -e "\n完了!"
#!/bin/bash
# シンプルなプログレスバー
for i in {1..10}; do
    echo -ne "\r処理中: ["
    for ((j=0; j<i; j++)); do echo -n "#"; done
    for ((j=i; j<10; j++)); do echo -n " "; done
    echo -n "] $((i*10))%"
    sleep 0.2
done
echo -e "\n完了!"

\r(キャリッジリターン)を使うと、同じ行を上書きできます。ダウンロードの進捗表示などでよく見る動きが作れますね!

ログ出力関数

# 色付きログ出力関数
log_info() {
    echo -e "\033[34m[INFO]\033[0m $1"
}

log_success() {
    echo -e "\033[32m[SUCCESS]\033[0m $1"
}

log_error() {
    echo -e "\033[31m[ERROR]\033[0m $1"
}

# 使用例
log_info "処理を開始します"
log_success "ファイルの作成に成功しました"
log_error "接続に失敗しました"

デバッグ情報の出力

# デバッグモードの切り替え
DEBUG=true

debug_echo() {
    if [ "$DEBUG" = true ]; then
        echo -e "\033[35m[DEBUG]\033[0m $1" >&2
    fi
}

# 使用例
debug_echo "変数の値: $variable"

echoの代替コマンド

printf vs echo

# printfはより厳密な書式制御が可能
$ printf "%s\n" "Hello"
$ printf "%d + %d = %d\n" 2 3 5

# echoは簡単だが、動作がシェルによって異なる場合がある
$ echo "Hello"

catとヒアドキュメント

# 複数行の出力にはcatも便利
$ cat << EOF
これは
複数行の
テキストです
EOF

トラブルシューティング

よくある問題と解決策

  1. 特殊文字が表示されない

    • -eオプションを忘れていないか確認
    • echo -e "\n改行\n"
  2. 変数が展開されない

    • シングルクォートではなくダブルクォートを使用
    • echo "$variable"
  3. 色が表示されない

    • ターミナルがANSIエスケープコードに対応しているか確認
    • パイプやリダイレクト時は色が失われることがある

📝 まとめ

今日はechoコマンドについて学びました!

  • echoは文字列を出力する基本コマンドですが、実は機能豊富
  • ダブルクォートは変数展開、シングルクォートは文字列そのまま
  • -eオプションで改行やタブなどの特殊文字が使える
  • ANSIエスケープコードで色付き出力も可能
  • -nオプションで改行なし出力、プログレスバーも作れる

echoコマンドは、まるで画家の筆のように、ターミナルに自由に文字を描けるツールです。単純そうに見えて、使いこなせばスクリプトが見違えるほど分かりやすくなりますよ!

最初は基本的な使い方から始めて、徐々に色付けやプログレスバーなどの高度な技術に挑戦してみてくださいね。きっとターミナルがもっと楽しくなるはずです!

今日の練習: まずecho "Hello, World!"から始めて、次にecho -e "行1\n行2\n行3"で改行を試してみましょう。慣れてきたら、色付き出力にも挑戦してみてください!