печать цветного текста с использованием эха

25

Я знаю, что для печати цветного текста с использованием эха, например красного цвета, используется код: 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) точно означает здесь?
Я прочитал в справочной странице, что это побег, но я не понял, что это значит.

M0εiπ
источник
В общем, вы избегаете символов, которые имеют особое значение в текущем техническом контексте. Например, строки часто пишутся в кавычках, «вот так». Но если вам нужны кавычки внутри строки, вы должны избегать этих символов, чтобы они интерпретировались буквально, а не как разделители. Например, что echo "She said \"Hi\""касается этого случая (ваш вопрос), вам придется ждать лучшего ответа.
Эмануэль Берг
hermannn.com/programs/terminal_fonts
Герман Ингальдссон

Ответы:

13

Они являются частью «элементов последовательности» escape-последовательностей ANSI, также известных как последовательности ECMA-48 CSI, которые были первоначально приняты в 1976 году.

В частности, [« Представитель контрольной последовательности »

Введите man console_codesпрактически любой * nix дистрибутив, чтобы увидеть коды и некоторые документы.

Энтони Хатзопулос
источник
man 4 console_codeне man console_code: В моем Ubuntu
0x6773
Имя страницы руководства заканчивается буквой "s", поэтому "man console_codes" должно вызвать правильную страницу.
Микко Ранталайнен
4

Чтобы быть точным цветовые коды определены ниже

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

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

Так что, в основном, разные терминалы интерпретируют цветовые коды, и вы подписываете свой текст внутри этих элементов. Это странный способ заставить терминал понять, что вы имеете в виду (например, HexCodes или Binary ..)

Энн Джоун
источник
2

Я нашел хорошее объяснение здесь (по крайней мере, хорошо для меня :-) ). Я не уверен, будет ли это полезно для вас.

Чтобы начать, напечатайте это на своей консоли:

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

Первый символ является escape-символом, который выглядит как два символа ^ и [. Чтобы распечатать это, вы должны нажать CTRL + V, а затем клавишу ESC. Все остальные символы являются обычными печатными символами, поэтому вы видите строку In Color в красном. Тип остается тем же цветом, пока вы не вернетесь назад, набрав это:

Это управляющие коды для установки цветовых режимов в терминале. Разве что при печати обычными символами они выглядят так.

BorrajaX
источник
2

\eявляется сокращением для Escape персонажа. <ESC>[и mявляются маркерами в начале и в конце последовательности управления цветом ANSI, которые являются подмножеством терминального управления ANSI секвенировали. Большинство из них начинаются с <ESC>[цифры, за которой следует число, за которым следует буква, указывающая, какая функция реализуется (например, переместить курсор в строку; очистить до конца строки, вернуть курсор в сохраненное место и т. Д.).

DopeGhoti
источник