ターミナルで文字色や背景色を指定する方法

Linux等のコンソールで、文字色や背景色を指定するにはANSIエスケープシーケンスを使えばよい。

例えば、コマンドライン上から、次のようなechoコマンドで実行すると……

echo -e '\e[34mHello \e[1mWorld!\e[m'
echo -e 'This is \e[4;42mANSI Escape sequences\e[m sample.'

以下のように出力文字列の装飾や色(文字色/背景色)を指定することができる。

Hello World!
This is ANSI Escape sequences sample.

これは、出力文字列中にANSIエスケープシーケンスを含めることで、ターミナルソフトウェア(例えばTera TermやPuTTyGNOME-terminal等)がANSIエスケープシーケンスに従って文字の描画モードを変更してくれるためだ。(もう少し詳しく言うと、文字の描画モードだけでなく、カーソルの移動、表示のクリアなども指定することができるらしい。)

記法

ANSIエスケープシーケンスは、ASCII文字のESC(Escape:0x1B)から始まる文字列であり、様々なものが定義されている。(詳しくは参考リンク参照)

この内、描画モードに関するものは次の形式で定義されており、Valueに特定の数値を指定することで描画モードを設定できる。

ESC[Value;...;Valuem

なお、ESCBashの文字列リテラル中で記載する場合は\e\033と記載する。 そのため、Bashの文字列リテラルANSIエスケープシーケンスを含める場合は、冒頭のechoコマンドの引数のように\e[34m(\033[34mでもいい)のように記載する。 (また、echo の場合、文字列中のバックスラッシュ\から始まるエスケープ文字を有効にするには-eオプションが必要なので注意。)

コード

一般的に使われていると思われるコードは以下のとおり。 ただし、ターミナルによってサポートされていないものや違う効果になるものもあるので注意が必要。

属性リセット
コード 効果
0 属性リセット

なお、コードが省略された場合\e[m\e[0mとして扱われる。

文字の装飾

コード 効果
1 太字
2 薄字
3 タリック
4 アンダーライン
5 遅いブリンク
6 早いブリンク
7 文字色と背景色の反転
8 表示を隠す
9 取り消し線
53 オーバーライン

文字の装飾の終了

コード 効果
22 太字、薄字の終了
23 イタリックの終了
24 アンダーライン終了
25 ブリンクの終了
27 文字色と背景色の反転の終了
28 表示を隠す
29 取り消し線の終了
55 オーバーラインの終了

ただし、ターミナルによってはサポートされていないものもあるため、文字の装飾をやめるのは\e[0m属性リセットを実行したほうがよいかも。

文字色

コード 効果
30
31
32
33
34
35 マゼンタ
36 シアン
37
39 デフォルト色

背景色

コード 効果
40
41
42
43
44
45 マゼンタ
46 シアン
47
49 デフォルト色
参考リンク