mencetak teks berwarna menggunakan gema

25

Saya tahu bahwa untuk mencetak teks berwarna menggunakan gema, misalnya warna merah, kodenya adalah: echo -e "\e[1;31m This is red text \e[0m"
dan saya tahu bahwa dalam contoh ini, 31 adalah kode warna merah dan jumlah warna lainnya adalah:

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

dan untuk warna latar belakang, num adalah 40 hingga 47

Pertanyaan saya adalah ini: apa arti \edan [dan m(setelah 31) tepatnya di sini?
Saya membaca di halaman manual bahwa melarikan diri, tetapi saya tidak mengerti apa artinya.

M0εiπ
sumber
Secara umum, Anda melarikan diri karakter yang memiliki arti khusus dalam konteks teknis saat ini. Misalnya, string sering ditulis dalam tanda kutip, "seperti ini". Tetapi jika Anda ingin tanda kutip dalam string, Anda harus menghindari karakter itu sehingga mereka akan diartikan secara harfiah dan bukan sebagai pembatas. Misalnya, echo "She said \"Hi\""untuk kasus ini (pertanyaan Anda), Anda harus menunggu jawaban yang lebih baik.
Emanuel Berg

Jawaban:

13

Mereka adalah bagian dari 'Elemen urutan' dari urutan pelarian ANSI yang juga dikenal sebagai urutan ECMA-48 CSI yang awalnya diadopsi pada tahun 1976

Lebih khusus lagi [adalah ' Pengenalan Urutan Kontrol '

Ketikkan man console_codeshampir semua distro * nix untuk melihat kode dan beberapa dokumen.

Anthony Hatzopoulos
sumber
man 4 console_code tidak man console_code : Di ubuntu saya
0x6773
Nama halaman manual diakhiri dengan "s" jadi "man console_codes" akan memunculkan halaman yang benar.
Mikko Rantalainen
4

Untuk menjadi kode warna yang tepat didefinisikan sebagai berikut-

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

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

Jadi pada dasarnya ini hanya cara terminal yang berbeda menafsirkan kode warna dan Anda menulis teks Anda dalam elemen-elemen ini. Ini cara yang aneh untuk membuat terminal mengerti apa yang Anda maksud (seperti HexCodes atau Binary ..)

Ann Jawn
sumber
2

Saya menemukan penjelasan yang bagus di sini (setidaknya, bagus untuk saya :-) ). Saya tidak yakin apakah itu akan berguna bagi Anda.

Untuk memulai, ketikkan ini di konsol Anda:

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

Karakter pertama adalah karakter pelarian, yang terlihat seperti dua karakter, ^ dan [. Untuk dapat mencetak ini, Anda harus menekan CTRL + V dan kemudian tombol ESC. Semua karakter lain adalah karakter yang dapat dicetak normal, sehingga Anda melihat string berwarna dalam warna merah. Jenis tetap warna itu sampai Anda kembali dengan mengetik ini:

Mereka adalah kode pelarian untuk mengatur mode warna di terminal. Hanya saja ketika dicetak dengan karakter biasa, mereka terlihat seperti itu.

BorrajaX
sumber
2

\eadalah singkatan untuk karakter Escape. the <ESC>[dan the madalah penanda untuk awal dan akhir dari rangkaian kontrol warna ANSI, yang merupakan bagian dari rangkaian kontrol terminal ANSI yang diurutkan. Sebagian besar dari mereka mulai dengan <ESC>[, diikuti oleh angka, diikuti dengan huruf yang menunjukkan fungsi mana yang sedang dilaksanakan (mis. Pindahkan kursor ke baris; hapus ke akhir baris, kembalikan kursor ke lokasi yang disimpan, dan lain-lain).

DopeGhoti
sumber