Perbedaan antara \ e dan ^ [

15

Gilles menulis :

karakter 27 = 033 = 0x1b = ^[=\e

Demizey menulis :

^ [hanyalah representasi ESCAPE dan \ e ditafsirkan sebagai karakter ESCAPE yang sebenarnya

Kemudian saya juga menemukan baris ini dari artikel TechRepublic

Pastikan Anda menulis urutan tombol sebagai \ e [24 ~ daripada ^ [[24 ~. Ini karena urutan ^ [sama dengan kunci [Esc], yang diwakili oleh \ e di dalam shell. Jadi, misalnya, jika urutan kunci adalah ^ [[OP kode bind yang dihasilkan untuk digunakan adalah \ e [OP.

Tapi saya telah menggunakan pemetaan yang menggunakan ^ [bukan \ e.

Jadi, apakah mereka bisa dipertukarkan? Kapan saya perlu menggunakan yang satu daripada yang lain?

Forethinker
sumber

Jawaban:

16

Jika Anda melihat pada standar ANSI ASCII , bagian bawah dari set karakter (32 pertama) dicadangkan "karakter kontrol" (kadang-kadang disebut sebagai "escape sequence"). Ini adalah hal-hal seperti karakter NUL, Life Feed, Carriage Return, Tab, Bell, dll. Sebagian besar dapat ditiru dengan menekan Ctrltombol bersamaan dengan tombol lain.

Urutan ke-27 (desimal) atau \033oktal, atau 0x1burutan hex adalah urutan Escape. Mereka semua adalah representasi dari urutan kontrol yang sama. Kerang, bahasa, dan alat yang berbeda merujuk pada urutan ini dengan cara yang berbeda. Its Ctrlurut adalah Ctrl- [, maka kadang-kadang yang direpresentasikan sebagai ^[, ^menjadi tangan pendek untuk Ctrl.

Anda dapat memasukkan urutan karakter kontrol sebagai urutan mentah pada baris perintah Anda dengan melanjutkannya dengan Ctrl- v. Ctrl- vuntuk sebagian besar shell dan program menghentikan interpretasi urutan kunci berikut dan sebagai gantinya memasukkan dalam bentuk mentahnya. Jika Anda melakukan ini dengan salah satu Escapekunci atau Ctrl- vitu akan ditampilkan pada sebagian besar kerang sebagai ^[. Namun, meskipun urutan ini akan ditafsirkan, itu tidak akan memotong dan menempel dengan mudah, dan dapat dikurangi menjadi urutan karakter yang tidak terkontrol ketika ditemui oleh protokol atau program tertentu.

Untuk menyiasatinya agar lebih mudah digunakan, utilitas tertentu mewakili urutan "mentah" baik dengan \033(dengan referensi oktal), referensi hex \x1batau dengan referensi karakter khusus \e. Ini hampir sama dengan cara yang \tditafsirkan sebagai Tab- yang omong-omong juga bisa menjadi input melalui Ctrl- i, atau \nsebagai baris baru atau Enterkunci, yang juga dapat dimasukkan melalui Ctrl- m.

Jadi ketika Gilles mengatakan:

27 = 033 = 0x1b = ^ [= \ e

Dia mengatakan desimal ASCII 27, 33 oktal, hex 1b, Ctrl- [dan \esemua sama artinya semua mengacu pada hal yang sama (secara semantik).

Ketika Demizey berkata

^ [hanyalah representasi ESCAPE dan \ e ditafsirkan sebagai karakter ESCAPE yang sebenarnya

Dia berarti semantik, tetapi jika Anda menekan Ctrl- v Ctrl- [ini adalah persis sama dengan \e, urutan dimasukkan baku kemungkinan besar akan diperlakukan dengan cara yang sama, tapi ini tidak selalu dijamin, dan sehingga dianjurkan untuk menggunakan pemrograman lebih portabel \eatau 0x1batau \033tergantung pada bahasa / shell / utilitas yang digunakan.

Drav Sloan
sumber
4

Semua ini adalah representasi dari karakter yang digunakan beberapa perangkat lunak atau manusia. Saya mendaftar yang paling umum. Jika Anda berbicara dengan manusia, gunakan apa pun yang mereka akan mengerti. (Jelas usaha saya untuk memastikan bahwa Anda akan mengerti setidaknya salah satu bumerang ini.) Jika Anda berbicara dengan perangkat lunak, lihat dokumentasi untuk mengetahui apa yang dimengerti.

Di bash, urutan pelarian \e, \033dan \x1bberfungsi sebagai argumen untuk printf, di $'…', di prompt, dan di binding utama. Di binding utama, ada sintaksis \C-[yang lebih umum yang berfungsi karena karakter 27 adalah apa yang Anda dapatkan dari mengetik Ctrl+ [(sintaks itu adalah tiruan dari binding kunci Emacs). \033bekerja di semua shell sebagai argumen untuk printf; konteks dan notasi lainnya tergantung pada shell.

Layar tidak mengenali urutan pelarian ini, tetapi mengenali ^sebagai awalan kontrol, jadi itu ^[berarti karakter 27.

Gilles 'SO- berhenti menjadi jahat'
sumber