La differenza tra \ e e ^ [


15

Gilles ha scritto :

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

Demizey ha scritto :

^ [è solo una rappresentazione di ESCAPE e \ e viene interpretato come un vero carattere ESCAPE

Poi ho anche trovato questa riga da un articolo di TechRepublic

Assicurati di scrivere la sequenza di tasti come \ e [24 ~ anziché ^ [[24 ~. Questo perché la sequenza ^ [equivale al tasto [Esc], che è rappresentato da \ e nella shell. Quindi, ad esempio, se la sequenza di tasti fosse ^ [[OP il codice di associazione risultante da usare sarebbe \ e [OP.

Ma ho usato mappature che usano ^ [invece di \ e.

Quindi sono intercambiabili? Quando devo usare l'uno anziché l'altro?

Risposte:


16

Se dai un'occhiata allo standard ANSI ASCII , alla parte inferiore del set di caratteri (i primi 32) sono riservati "caratteri di controllo" (a volte indicati come "sequenze di escape"). Queste sono cose come il carattere NUL, Alimentazione, Ritorno a capo, Tab, Campana, ecc. La stragrande maggioranza può essere emulata premendo il Ctrltasto in combinazione con un altro tasto.

La \033sequenza 27 (decimale) o ottale, o 0x1bsequenza esadecimale, è la sequenza di escape. Sono tutte rappresentazioni della stessa sequenza di controllo. Diverse shell, lingue e strumenti fanno riferimento a questa sequenza in diversi modi. La sua Ctrlsequenza è Ctrl- [, quindi a volte viene rappresentata come ^[, ^essendo una scorciatoia per Ctrl.

È possibile inserire sequenze di caratteri di controllo come sequenze non elaborate sulla riga di comando procedendo con Ctrl- v. Ctrl- valla maggior parte delle shell e dei programmi interrompe l'interpretazione della seguente sequenza di tasti e si inserisce invece nella sua forma grezza. Se lo fai con il Escapetasto o Ctrl- vverrà visualizzato sulla maggior parte delle shell come^[ . Tuttavia, sebbene questa sequenza venga interpretata, non verrà tagliata e incollata facilmente e potrebbe ridursi a una sequenza di caratteri non di controllo quando incontrata da determinati protocolli o programmi.

Per ovviare a questo per facilitarne l'uso, alcune utility rappresentano la sequenza "grezza" con \033(per riferimento ottale), riferimento esadecimale \x1bo con riferimento a caratteri speciali \e. Questo è più o meno lo stesso nel modo in cui \tviene interpretato come Tab- che tra l'altro può anche essere inserito tramite Ctrl- i, o \ncome newline o Enterchiave, che può anche essere inserito tramite Ctrl- m.

Quindi quando Gilles dice:

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

Sta dicendo ASCII decimale 27, ottale 33, esadecimale 1b, Ctrl- [e \esono tutti uguali, significa che si riferiscono tutti alla stessa cosa (semanticamente).

Quando dice Demizey

^ [è solo una rappresentazione di ESCAPE e \ e viene interpretato come un vero carattere ESCAPE

Egli intende semanticamente, ma se si preme Ctrl- v Ctrl- [questo è esattamente lo stesso \e, la sequenza inserita grezzo sarà molto probabilmente essere trattati allo stesso modo, ma questo non è sempre garantita, e così si consiglia di utilizzare il livello di codice più portabile \eo 0x1bo \033seconda sulla lingua / shell / utility in uso.


4

Tutte queste sono rappresentazioni di quel personaggio che usano alcuni software o alcuni umani. Ho elencato i più comuni. Se stai parlando con un essere umano, usa quello che capiranno. (Evidentemente il mio tentativo di essere sicuro di capire almeno uno di questi fallimenti.) Se stai parlando con un software, consulta la documentazione per sapere cosa comprende.

In bash, le sequenze di escape \e, \033e \x1bopera come argomento a printf, in $'…', in richieste, e combinazioni di tasti. Nelle associazioni di tasti, c'è una sintassi più generale \C-[che funziona perché il carattere 27 è ciò che ottieni digitando Ctrl+ [(quella sintassi è un'imitazione delle associazioni di tasti di Emacs). \033funziona in tutte le shell come argomento perprintf ; gli altri contesti e notazioni sono dipendenti dalla shell.

Lo schermo non riconosce nessuna di queste sequenze di escape, ma riconosce ^come prefisso di controllo, quindi ^[indica il carattere 27.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.