Drucken von farbigem Text mit Echo

25

Ich weiß, dass zum Drucken eines farbigen Texts mit Echo, z. B. rote Farbe, der Code wie folgt lautet: echo -e "\e[1;31m This is red text \e[0m"
und ich weiß, dass in diesem Beispiel 31 der Code der roten Farbe und die Anzahl der anderen Farben wie folgt lautet:

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

und für Hintergrundfarben ist die Zahl 40 bis 47

meine frage lautet: was bedeutet \eund [und m(nach 31) genau hier?
Ich habe in der Manpage gelesen, dass es sich um Flucht handelt, aber ich habe nicht verstanden, was es bedeutet.

M0εiπ
quelle
Im Allgemeinen entziehen Sie sich Zeichen, die im aktuellen technischen Kontext eine besondere Bedeutung haben. Beispielsweise werden Zeichenfolgen häufig in Anführungszeichen "wie folgt" geschrieben. Wenn Sie jedoch Anführungszeichen innerhalb einer Zeichenfolge wünschen, müssen Sie diese Zeichen maskieren, damit sie wörtlich und nicht als Begrenzer interpretiert werden. Für echo "She said \"Hi\""diesen Fall (Ihre Frage) müssen Sie beispielsweise auf eine bessere Antwort warten.
Emanuel Berg

Antworten:

13

Sie sind Teil der 'Sequenzelemente' von ANSI-Escape-Sequenzen, auch bekannt als ECMA-48- CSI-Sequenzen, die ursprünglich 1976 übernommen wurden

Genauer gesagt [ist der ' Control Sequence Introducer '

Geben Sie man console_codesfast jede * nix-Distribution ein, um die Codes und einige Dokumente anzuzeigen.

Anthony Hatzopoulos
quelle
man 4 console_codenicht man console_code: In meinem Ubuntu
0x6773
Der Name der man-Seite endet mit einem "s", daher sollte "man console_codes" die richtige Seite aufrufen.
Mikko Rantalainen
4

Um genau zu sein, werden Farbcodes wie folgt definiert:

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

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

Im Grunde ist es also die Art und Weise, wie verschiedene Terminals Farbcodes interpretieren und Sie Ihren Text innerhalb dieser Elemente beschriften. Es ist eine seltsame Möglichkeit, das Terminal zu verstehen, was Sie meinen (wie HexCodes oder Binary ..)

Ann Jawn
quelle
2

Ich habe hier eine nette Erklärung gefunden (zumindest nett für mich :-) ). Ich bin mir nicht sicher, ob es für Sie nützlich sein wird.

Geben Sie dies zunächst in Ihre Konsole ein:

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

Das erste Zeichen ist ein Escape-Zeichen, das wie zwei Zeichen ^ und [aussieht. Um dies ausdrucken zu können, müssen Sie STRG + V und dann die ESC-Taste drücken. Alle anderen Zeichen sind normale druckbare Zeichen, sodass die Zeichenfolge in Farbe in Rot angezeigt wird. Der Typ bleibt so lange in dieser Farbe, bis Sie ihn erneut eingeben:

Dies sind Escape-Codes zum Einstellen der Farbmodi im Terminal. Ist nur das, wenn mit regulären Zeichen gedruckt, sehen sie so aus.

BorrajaX
quelle
2

\eist eine Abkürzung für den Escape-Charakter. Das <ESC>[und das msind die Markierungen für den Anfang und das Ende von ANSI-Farbkontrollsequenzen, die eine Teilmenge der ANSI-Terminalkontrollsequenzen sind. Die meisten von ihnen beginnen mit <ESC>[einer Zahl, gefolgt von einem Buchstaben, der angibt, welche Funktion implementiert wird (z. B. Cursor in Zeile bewegen; zum Zeilenende zurücksetzen, Cursor an gespeicherte Position zurücksetzen usw.).

DopeGhoti
quelle