ANSIリセットコード - ターミナルフォーマットのリセット方法

ユニバーサルリセット(0)、太字(22)、斜体(23)、下線(24)、カラー(39/49)などの属性別リセットを含むANSIリセットコードの完全リファレンス。

Practical Usage

詳細な説明

ANSIリセットコード

リセットコードはターミナル属性をデフォルト状態に復元します。適切なリセットの使用により、カラーやスタイルが後続のターミナル出力ににじむのを防ぎます。

ユニバーサルリセット(コード0)

コード0はすべてのフォーマット属性を一度にクリアします:

echo -e "\033[1;31;4mスタイル付きテキスト\033[0m 通常のテキスト"

これは最も一般的に使用されるリセットで、すべてのスタイル付き出力の末尾に追加すべきです。

特定のリセットコード

コード リセット対象 対応コード
0 すべて 全コード
22 太字と淡色 1, 2
23 斜体 3
24 下線 4
25 点滅 5
27 反転 7
28 非表示 8
29 取り消し線 9
39 フォアグラウンド色 30-37, 90-97, 38;5;N, 38;2;R;G;B
49 バックグラウンド色 40-47, 100-107, 48;5;N, 48;2;R;G;B

なぜ特定のリセットを使うのか?

他の属性を維持しながら1つの属性を変更したい場合:

# 下線を削除するが太字とカラーは維持
echo -e "\033[1;4;31m太字下線付き赤\033[24m 太字赤のみ\033[0m"

# フォアグラウンドカラーを変更するがバックグラウンドは維持
echo -e "\033[31;42m緑に赤 \033[34m緑に青\033[0m"

# すべてのカラーを削除するがフォーマットは維持
echo -e "\033[1;4;31m太字下線付き赤 \033[39;49m太字下線付きデフォルト\033[0m"

よくある間違い

リセット忘れ:

# 悪い例 - カラーが次の行ににじむ
echo -e "\033[31m赤いテキスト"
echo "これも赤くなります!"

# 良い例 - 常にリセット
echo -e "\033[31m赤いテキスト\033[0m"
echo "これは通常のテキスト"

リセットが広すぎる:

# 悪い例 - バックグラウンドカラーが失われる
echo -e "\033[42m\033[1m太字 \033[0m緑のバックグラウンドではなくなる"

# 良い例 - 太字のみリセット
echo -e "\033[42m\033[1m太字 \033[22m通常の太さ、まだ緑\033[0m"

スクリプト終了時のリセット

スクリプト終了時に常にターミナル状態をリセット:

trap 'printf "\033[0m"' EXIT

これにより、スクリプトがクラッシュしたり中断されたりしても、ターミナルが通常の状態に戻ることが保証されます。

ユースケース

適切なリセットコードの使用は、あらゆるプロダクションCLIツールにとって重要です。リセットなしでは、カラー出力がユーザーのターミナルセッションを破損し、後続のコマンドが読めなくなる可能性があります。出力をパイプするツール、CI/CD環境で実行されるツール、予期しないフォーマットがパース問題を引き起こす可能性がある他のシェルスクリプト内で使用されるツールでは特に重要です。

試してみる — ANSI Color Code Reference

フルツールを開く