IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

WSLで始めるUbuntu

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第12回 エスケープシーケンスについて知ろう (宮崎悟) 2019年9月

前回はlocaleとプロンプト変数PS1~4について説明しました。今回は、echoやプロンプトなどで使用できるエスケープシーケンスについて説明しようと思います。

エスケープシーケンス

エスケープシーケンスとは、通常の文字列では表せない特殊文字や文字コードを直接指定する文字列です。bashでは、以下のエスケープシーケンスの記法が規定されています。

エスケープシーケンス 説明
\a 警告(ビープ音)を鳴らす
\b バックスペース
\e
\E
エスケープ文字
\f フォームフィード
\n 改行
\r 復帰(キャリッジリターン)
\t 水平タブ
\v 垂直タブ
\\ バックスラッシュ
\' シングルクォーテーション
\" ダブルクォーテーション
\nnn 8進数nnnに相当する8bit文字
\xHH 16進数HHに相当する16bit文字
\uHHHH 16進数HHHHに相当する32bitのUnicode文字
\UHHHHHHHH 16進数HHHHHHHHに相当する64bitのUnicode文字
\cx Ctrl+x に相当する文字

改行(\n)は、Linuxを含めたUNIX like OSでの改行コードになります。なお、Windowsやネットワークプロトコルの一部では"\r\n"が改行コードとなります。復帰(\r)はMac OS 9以前の改行コードになり、今は殆ど使われていません。

echo $''の「'」で囲まれた部分にエスケープシーケンスを含む文字列を指定することで、エスケープシーケンスを適用して表示することが出来ます。もしくはecho -nを使用して、「"」で囲まれたエスケープシーケンスを含む文字列を表示することが出来ます。ただし、echo -nを使用する場合は、「\nnn」を使用するとき「\0nnn」を使用する必要があります。以下に使用例を示します。

$ echo -e $'aaa\bbb'  # \bの前の文字を削除して表示
aabb
$ echo -e "aaa\nbbb" # 改行を表示
aaa
bbb
$ echo -e "aaa\ttt"  # tabを表示
aaa     tt
$ echo -e "aaa\\ttt" # tabが表示せず、\ を表示
aaa\ttt
$ echo 
$ echo -e "aa"bb"  # 間違ったダブルクォート指定
>    # 次にCtrl+dを入力
> -bash: 対応する `"' を探索中に予期しないファイル終了 (EOF) です
-bash: 構文エラー: 予期しないファイル終了 (EOF) です
$ echo -e "aa\"bb" # ダブルクォートの表示
aa"bb
$ echo  $'aa\'bb'  # シングルクォートの表示
aa'bb
$ echo $'\101'     # 8進数文字コードの表示
A
$ echo -e "\0101"  # 8進数文字コードの表示
A
$ echo $'\x41'     # 16進数文字コードの表示
A
$ echo -e '\x41'   # 16進数文字コードの表示
A
$ echo -e '\u203C' # 32bitUnicode文字列(bangbang)の表示
‼
$ echo $'\U1F479'  # 64bitUnicode文字(なまはげ/japanese_ogre)の表示
👹  

絵文字は使用しているフォントによっては表示されない可能性がありますので、ご注意ください。

文字装飾、文字色を変える

ターミナルの機能を利用して、文字色や文字種を変えることが出来ます。ターミナルはterminfoの仕組みによってその動作を変えます。変数TERMによってターミナルの種類を変えることが出来ます。ターミナル「xterm」では、基本の8色しか表示できません。最近よく使われる「xterm-256color」では、256色を表示することが出来ます。

文字装飾

以下は、文字列の装飾を変更するエスケープシーケンスです。ただしフォントによって動作しないことがあります。

効果
\e[0m 装飾なし
\e[1m 太字
\e[2m 細字(未対応)
\e[3m イタリック体
\e[4m <u>下線</u>
\e[5m ブリンク
\e[6m 高速ブリンク
\e[7m 文字色と背景色の反転
\e[8m 表示を隠す
\e[9m 取り消し
8色出力

以下は文字色を基本の8色に変えるエスケープシーケンスです。ただし、ターミナルのカラースキーマによって色は変わります。文字色を元に戻すには、装飾なし(\e[0m)を指定します。

効果
\e[30m 文字色を黒色にする
\e[31m 文字色を赤色にする
\e[32m 文字色を緑色にする
\e[33m 文字色を黄色にする
\e[34m 文字色を青色にする
\e[35m 文字色をマゼンタ(紫色)にする
\e[36m 文字色をシアン(水色)にする
\e[37m 背景色を白色にする
\e[40m 背景色を黒色にする
\e[41m 背景色を赤色にする
\e[42m 背景色を緑色にする
\e[43m 背景色を黄色にする
\e[44m 背景色を青色にする
\e[45m 背景色をマゼンタ(紫色)にする
\e[46m 背景色をシアン(水色)にする
\e[47m 背景色を白色にする

以下は出力例です。

$ echo -e '\e[47m\e[30mK\e[0m \e[31mR \e[32mG \e[33mY \e[34mB \e[35mC \e[35mM \e[36mC \e[37mW \e[0m'
$ echo -e '\e[40mK \e[41mR \e[42mG \e[43mY \e[44mB \e[45mC \e[45mM \e[46mC \e[47m\e[30mW \e[0m'

fig01

256色出力

TERMに「xterm-256color」のような256色対応の値と、それに対応したターミナルソフトであれば256色表示か可能です。以下のエスケープシーケンスにより256色を出力可能です。

説明
\e[38;5nm nは0~255を設定でき、文字色にnを適用した色が表示される
\e[48;5nm nは0~255を設定でき、背景色にnを適用した色が表示される

24bitカラー対応のターミナルソフトを使用すれば、以下の様にRGB毎に色を指定して出力が可能です。

説明
\e[38;5r,g,bm r,g,bは0~8を設定でき、文字色のRGBの値にそれぞれr,g,bを適用した色が表示される
\e[48;5r,g,bm r,g,bは0~8を設定でき、背景色のRGBの値にそれぞれr,g,bを適用した色が表示される

以下は256色の出力例です。

$ for ((i = 0; i < 16; i++)); do  # 文字色変更
>     for ((j = 0; j < 16; j++)); do
>         hex=$(($i*16 + $j))
>         printf '\e[38;5;%dm0x%02X\e[m ' $hex $hex
>     done
>     echo "";
> done
$ for ((i = 0; i < 16; i++)); do
>     for ((j = 0; j < 16; j++)); do
>         hex=$(($i*16 + $j))
>         printf '\e[48;5;%dm0x%02X\e[m ' $hex $hex
>     done
>     echo "";
> done
  • 256文字色

fig02

fig03

  • 256背景色

fig04

fig05

終わりに

今回はエスケープシーケンスについて説明しました。次回は、bashの引数などで指定するワイルドカードについて説明しようと思います。次回をお楽しみにお待ち下さい。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes