A diferença entre \ ee ^ [

12

Gilles escreveu :

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

Demizey escreveu :

^[ is just a representation of ESCAPE and \e is interpreted as an actual ESCAPE character

Então, também encontrei essa linha em um artigo do TechRepublic

Make sure you write the key sequence as \e[24~ rather than ^[[24~. This is because the ^[ sequence is equivalent to the [Esc] key, which is represented by \e in the shell. So, for instance, if the key sequence was ^[[OP the resulting bind code to use would be \e[OP.

Mas tenho usado mapeamentos que usam ^ [em vez de \ e.

Então eles são intercambiáveis? Quando preciso usar um em vez do outro?

    
por Forethinker 08.09.2013 / 03:23

2 respostas

13

Se você der uma olhada no padrão ANSI ASCII , a parte inferior do conjunto de caracteres (os primeiros 32) são reservados "caracteres de controle" (às vezes chamados de "seqüências de escape"). Estas são coisas como o caractere NUL, Life Feed, Carriage Return, Tab, Bell, etc. A grande maioria pode ser emulada pressionando a tecla Ctrl em combinação com outra tecla.

A 27ª (decimal) ou 3 octal sequência, ou 0x1b sequência hex é a sequência Escape. Todas são representações da mesma sequência de controle. Conchas, linguagens e ferramentas diferentes referem-se a essa sequência de maneiras diferentes. Sua Ctrl seqüência é Ctrl - [, portanto, às vezes sendo representada como ^[ , ^ sendo um ponteiro curto para Ctrl .

Você pode inserir sequências de caracteres de controle como sequências brutas em sua linha de comando, procedendo-as com Ctrl - v . Ctrl - v para a maioria das shells e programas para a interpretação da seguinte sequência de teclas e, em vez disso, insere em sua forma bruta. Se você fizer isso com a tecla Escape ou Ctrl - v ela será mostrada na maioria dos shells como ^[ . No entanto, embora essa sequência seja interpretada, ela não será cortada e colada facilmente e poderá ser reduzida a uma sequência de caracteres sem controle quando for encontrada por certos protocolos ou programas.

Para contornar isso para facilitar o uso, alguns utilitários representam a sequência "bruta" com 3 (por referência octal), referência hexa \x1b ou referência de caracteres especiais \e . Isto é praticamente o mesmo no modo em que \t é interpretado como um Tab - que por sinal também pode ser inserido via Ctrl - i , ou \n como nova linha ou a tecla Enter , que também pode ser inserida através de Ctrl - m .

Então, quando Gilles diz:

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

Ele está dizendo decimal ASCII 27, octal 33, hex 1b, Ctrl - [ e \e são tudo igual ele significa que todos se referem à mesma coisa (semanticamente).

Quando Demizey diz

^[ is just a representation of ESCAPE and \e is interpreted as an actual ESCAPE character

Ele significa semanticamente, mas se você pressionar Ctrl - v Ctrl - [ isto é exatamente o mesmo como \e , a sequência inserida em bruto provavelmente será tratada da mesma maneira, mas isso nem sempre é garantido e, portanto, recomenda-se usar o programaticamente mais portátil \e ou 0x1b ou 3 dependendo do idioma / shell / utilitário sendo usado.

    
por 08.09.2013 / 03:56
4

Todas essas são representações desse caractere que alguns softwares ou alguns humanos usam. Eu listei os mais comuns. Se você está falando com um humano, use o que eles entenderem. (Evidentemente, minha tentativa de ter certeza de que você entenderia pelo menos uma dessas coisas saiu pela culatra.) Se você estiver falando com software, consulte a documentação para saber o que ela entende.

No bash, as seqüências de escape \e , 3 e \x1b funcionam como um argumento para printf , em $'…' , nos prompts e nas associações de teclas. Em atalhos de teclado, há uma sintaxe mais geral \C-[ que funciona porque o caractere 27 é o que você obtém digitando Ctrl + [ (essa sintaxe é uma imitação da tecla Emacs) ligações). 3 funciona em todos os shells como um argumento para printf ; os outros contextos e notações são dependentes do shell.

A tela não reconhece nenhuma dessas seqüências de escape, mas reconhece ^ como o prefixo de controle, então ^[ significa caractere 27.

    
por 08.09.2013 / 03:57