お兄ちゃん!
ls や grep などの出力に
色が使われていることがあるよね?
私のスクリプトの出力でも
色を使えないかな?
もちろんできるよ!
今回は
「ANSI エスケープシーケンス
(ANSI escape sequences)」
を学ぼう!
例えば「緑色にする」という
意味を表す文字列を書けば
文字が緑色になるのね!
そういうことだね
では主に色に関係する
ANSI エスケープシーケンスを
見てみよう!
| ANSI エスケープシーケンス | 役割 |
|---|---|
\e[30m |
文字色を黒で表示 |
\e[31m |
文字色を赤で表示 |
\e[32m |
文字色を緑で表示 |
\e[33m |
文字色を黄で表示 |
\e[34m |
文字色を青で表示 |
\e[35m |
文字色をマゼンタで表示 |
\e[36m |
文字色をシアンで表示 |
\e[37m |
文字色を白で表示 |
| ANSI エスケープシーケンス | 役割 |
|---|---|
\e[40m |
背景色を黒で表示 |
\e[41m |
背景色を赤で表示 |
\e[42m |
背景色を緑で表示 |
\e[43m |
背景色を黄で表示 |
\e[44m |
背景色を青で表示 |
\e[45m |
背景色をマゼンタで表示 |
\e[46m |
背景色をシアンで表示 |
\e[47m |
背景色を白で表示 |
| ANSI エスケープシーケンス | 役割 |
|---|---|
\e[0m |
指定をリセット |
\e[1m |
文字を太字で表示 |
\e[2m |
淡い色で表示 |
\e[3m |
文字をイタリックで表示 |
\e[4m |
文字をアンダーラインで表示 |
\e[5m |
文字を点滅で表示 |
\e[6m |
文字を高速点滅で表示 |
\e[7m |
文字色と背景色を反転させて表示 |
\e[8m |
文字を非表示 |
色だけに
色々あるんだね!
これらの指定は
複数の数値を
「セミコロン( で
区切ることで
同時指定できるんだ
;)」
例えば 「淡い緑色の文字色」になるよ!
\e[42;2m は
エスケープシーケンスの解釈には
echo の -e オプションを使うんだ
さっそく
やってみるね!
echo -e "\e[32;2;1m緑色のみどりです!"
緑色のみどりです!
おお!緑色で表示してくれたよ!
でも
echo を実行した後の出力も緑色になっちゃっているねそれは「緑色で出力」という指定が 生き続けているからだよこういう場合は出力の最後で指定をリセットしてあげるといいよ
echo -e "\e[32;2;1m緑色のみどりです!\e[0m"
文字列の中にANSI エスケープシーケンスを混ぜると読みにくくなっちゃうね…
そういう場合は変数を使ったり
echo を分割してあげようGREEN="\e[32;2;1m"
RESET="\e[0m"
echo -e "${GREEN}緑色のみどりです!${RESET}"
echo -en "\e[32;2;1m"
echo "緑色のみどりです!"
echo -en "\e[0m"
今回は ANSI エスケープシーケンスで画面の表示に色などを付けられることを学んだよ!
他にもさらに細かな色の指定やカーソルの位置の操作など様々な端末操作をANSI エスケープシーケンスで表現できるんだ
エラーメッセージを目立つ赤色で表示して気づきやすくするなどシェルスクリプトでも役に立つ機能だよ!
また
reset はANSI エスケープシーケンスの指定も初期化してくれるよただちに指定を解除する場合に便利なので一緒に覚えておこう!