お兄ちゃん!
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 エスケープシーケンスの指定も初期化してくれるよ指定を解除するのに便利なので一緒に覚えておこう!