web-dev-qa-db-ja.com

エコーを使用してカラーテキストを印刷する

エコーを使用して色付きのテキスト、たとえば赤い色を印刷する場合、コードは次のとおりです:echo -e "\e[1;31m This is red text \e[0m"
そして、この例では、31は赤色のコードであり、他の色の数は次のとおりであることを知っています。

Black       0;30     Dark Gray     1;30
Blue        0;34     Light Blue    1;34
Green       0;32     Light Green   1;32
Cyan        0;36     Light Cyan    1;36
Red         0;31     Light Red     1;31
Purple      0;35     Light Purple  1;35
Brown       0;33     Yellow        1;33
Light Gray  0;37     White         1;37

背景色の場合、数値は40〜47です。

私の質問はこれです:\eおよび[およびm(31以降)はここで正確に何を意味しますか?
manページで\ eがエスケープであると読みましたが、それが何を意味するのか理解できませんでした。

25
M0εiπ

これらは ANSIエスケープシーケンス としても知られる「シーケンスエレメント」の一部です ECMA-48 としても知られています1976年に最初に採用されたCSIシーケンス

より具体的には、[は ' Control Sequence Introducer 'です

タイプ man console_codes ほとんどすべての* nixディストリビューションで、コードといくつかのドキュメントを参照してください。

13

正確にはカラーコードは以下のように定義されています-

Opening
RED= "\033[31m" or "\e[1;31m"
CYAN="\033[36m" or "\e[1;31m"

Closing = "\033[m" or "\e[0m"

したがって、基本的には、さまざまな端末がカラーコードを解釈する方法と、これらの要素内のテキストにキャプションを付けます。端末があなたの意味を理解するための奇妙な方法(HexCodesやBinaryなど)。

4
AnBisw

\eは、エスケープ文字の省略形です。 <ESC>[およびmは、ANSI端末制御シーケンスのサブセットであるANSIカラー制御シーケンスの開始と終了のマーカーです。それらのほとんどは<ESC>[で始まり、その後に数字、その後に実装されている機能を示す文字が続きます(例:カーソルを行に移動、行の終わりまでクリア、カーソルを保存された場所に戻す、など)。

2
DopeGhoti

私はニースの説明を見つけました ここ (少なくとも、私にとってニース:-))。それがあなたに役立つかどうかはわかりません。

開始するには、コンソールで次のように入力します。

echo "^[[0;31;40mIn Color"

最初の文字はエスケープ文字で、^と[の2文字のように見えます。これを印刷できるようにするには、CTRL + Vを押してからESCキーを押す必要があります。他のすべての文字は通常の印刷可能な文字であるため、文字列In Colorが赤で表示されます。タイプは、次のように入力して戻るまでその色のままです。

それらは端末のカラーモードを設定するためのエスケープコードです。通常の文字で印刷すると、そのようになります。

2
BorrajaX