エスケープシーケンスで出力の色や書式を変える

#概要
エスケープシーケンスを使えば端末エミュレータの出力テキストに色をつけたり形式を変えたりできる。
macのターミナルで試してみたのでメモ書き。

#環境
bashシェルであれば動作可能。

#####確認方法

```bash
$ echo $SHELL
```
環境変数$SHELLが設定されていなければ

```bash
$ ps -p $$
```
#使い方
下記のようにechoコマンドとそれぞれ組み合わせて使います。

```
$ echo エスケープ文字 SGR (対象文字列)
```

#サンプル

#####echo オプションなし

```bash
$ echo "^V^[[31mHello World^V^[[0m"
```
#####結果

$ <font color="Red">Hello World</font>

#####echo -e オプション付き


```bash
$ echo -e "\x1b[34mHello World\x1b[0m"
```
#####結果
$ <font color="blue">Hello World</font>

#記号の解説
echoコマンドでは-eオプションの有無でエスケープ文字の入力方法が異なります。

#### 共通部分
<dl>
<dt>[31m , [34m , [0m</dt>
<dd>- SGR(Select Graphic Rendition)。「[nm」の組み合わせで使用する。</dd>
<dd>- nの値を変えることで文字色、フォント、背景色など指定できる。</dd>
</dl>

#### echo オプションなし
<dl>
<dt>^V</dt>
<dd>- コマンドラインからエスケープ文字を入力する際に必ず必要な入力。</dd>
<dd>-「ctrl + v」で入力できる。</dd>
<dt>^[</dt>
<dd>- エスケープ文字。<dd>
<dd>-「esc」で入力できる。<dd>
</dl>
#### echo -e オプション付き
<dl>
<dt>\x1b</dt>
<dd>- エスケープ文字
<dd>-「esc」はアスキーコード27であルため、8進数の\033や16進数の\x1bも使用できる。
</dl>

#SGR(Select Graphic Rendition)
「 [nm 」のnの値を変えることで書式やフォントを変えることができる。
###書式
####- set


| n | 意味 | 例 | 結果 |
|:-:|:-:|:-:|:-:|
| 1 | 太字  |echo "^V^[[1mHello World" |**Hello World**|
| 2 | 薄い|echo "^V^[[2mHello World"  |<font color="Gainsboro">Hello World</font>   |
| 4 | 下線  |echo "^V^[[4mHello World"   |   |
| 5 |  点滅 |echo "^V^[[5mHello World"   |   |
| 7 | 色反転|echo "^V^[[7mHello World"   |   |
| 8 |  隠す |echo "^V^[[8mHello World"   |   |

####- reset
| n | 意味 | 例 | 結果 |
|:-:|:-:|:-:|:-:|
| 0  | 全ての設定をリセット  | echo -e "\x1b[34mHello World\x1b[0m"  |   |
| 21  |  太字の設定をリセット | echo -e "\x1b[1mHello World\x1b[21m"  |   |
| 22  |  薄い設定をリセット | echo -e "\x1b[2mHello World\x1b[22m"   |  |
| 24  |  下線の設定をリセット |echo -e "\x1b[4mHello World\x1b[24m"    |   |
| 25  |  点滅の設定をリセット |echo -e "\x1b[5mHello World\x1b[25m"    |   |
| 27  |  色反転の設定をリセット |echo -e "\x1b[7mHello World\x1b[27m"    |   |
| 28  |  隠すの設定をリセット |echo -e "\x1b[8mHello World\x1b[28m"    |   |

### 色指定
####- 文字色(基本)
| n | 意味 | 例 | 結果 |
|:-:|:-:|:-:|:-:|
| 30  | 黒  | echo "^V^[[30mHello World^V^[[0m"  |<font color="black">Hello World</font>   |
| 31  | 赤 |echo "^V^[[31mHello World^V^[[0m"   |<font color="red">Hello World</font>   |
| 32  |  緑 | echo "^V^[[32mHello World^V^[[0m"  |<font color="green">Hello World</font>   |
| 33  |  黄 |echo "^V^[[33mHello World^V^[[0m"   |<font color="yellow">Hello World</font>   |
| 34  |  青 |echo "^V^[[34mHello World^V^[[0m"   |<font color="blue">Hello World</font>   |
| 35  |  紫 |echo "^V^[[35mHello World^V^[[0m"   |<font color="purple">Hello World</font>   |
| 36  | シアン  |echo "^V^[[36mHello World^V^[[0m"   |<font color="cyan">Hello World</font>   |
| 37  |  白 |echo "^V^[[37mHello World^V^[[0m"   | <font color="white">Hello World</font>  |

####- 背景色(基本)
| n | 意味 | 例 | 結果 |
|:-:|:-:|:-:|:-:|
| 40  | 黒  | echo "^V^[[40mHello World^V^[[0m"  ||
| 41  | 赤 |echo "^V^[[41mHello World^V^[[0m"   | |
| 42  |  緑 | echo "^V^[[42mHello World^V^[[0m"  ||
| 43  |  黄 |echo "^V^[[43mHello World^V^[[0m"   ||
| 44  |  青 |echo "^V^[[44mHello World^V^[[0m"   ||
| 45  |  紫 |echo "^V^[[45mHello World^V^[[0m"   | |
| 46  | シアン  |echo "^V^[[46mHello World^V^[[0m"   | |
| 47  |  白 |echo "^V^[[47mHello World^V^[[0m"   |   |

#注意
* コマンドラインからエスケープ文字をそのまま入力する時は、「^V」に続けて「esc」を押す。「^V」は画面には表示されない。
* エスケープシーケンスの終わりに「[0m」を入力しないと、下記のように出力後も文字色が赤のままになる。

```bash
$ echo "^V^[[31mHello World"
```
結果
<font color="red">$</font>
<font color="red">$ whoami</font> 

# 参考文献
この記事は以下の情報を参考に書きました。

* bash:tip_colors_and_formatting - FLOZz' MISC  
https://misc.flogisoft.com/bash/tip_colors_and_formatting