CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回は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色に変えるエスケープシーケンスです。ただし、ターミナルのカラースキーマによって色は変わります。文字色を元に戻すには、装飾なし(\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'
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
今回はエスケープシーケンスについて説明しました。次回は、bashの引数などで指定するワイルドカードについて説明しようと思います。次回をお楽しみにお待ち下さい。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes