A diferença entre \ e e ^ [

15

Gilles escreveu :

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

Demizey escreveu :

^ [é apenas uma representação de ESCAPE e \ e é interpretado como um caractere ESCAPE real

Também encontrei esta linha em um artigo da TechRepublic

Certifique-se de escrever a sequência de teclas como \ e [24 ~ em vez de ^ [[24 ~. Isso ocorre porque a sequência ^ [é equivalente à tecla [Esc], representada por \ e no shell. Assim, por exemplo, se a sequência de teclas fosse ^ [[OP, o código de ligação resultante a ser usado seria \ e [OP.

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

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

Precursor
fonte

Respostas:

16

Se você der uma olhada no padrão ANSI ASCII , a parte inferior do conjunto de caracteres (os 32 primeiros) são "caracteres de controle" reservados (às vezes chamados de "seqüências de escape"). São coisas como o caractere NUL, Alimentação vitalícia, Retorno de carro, Guia, Campainha, etc. A grande maioria pode ser emulada pressionando a Ctrltecla em combinação com outra tecla.

A \033sequência 27 (decimal) ou octal ou 0x1bhexadecimal é a sequência Escape. São todas representações da mesma sequência de controle. Diferentes tipos de conchas, idiomas e ferramentas se referem a essa sequência de diferentes maneiras. Sua Ctrlsequência é Ctrl- [, portanto, às vezes, é representada como ^[, ^sendo uma mão curta para Ctrl.

Você pode inserir seqüências de caracteres de controle como sequências brutas em sua linha de comando, prosseguindo com Ctrl- v. Ctrl- vpara a maioria das conchas e programas interrompe a interpretação da seguinte sequência de teclas e, em vez disso, é inserida em sua forma bruta. Se você fizer isso com a Escapetecla ou Ctrl- v, será exibido na maioria dos shells como ^[. No entanto, embora essa sequência seja interpretada, ela não será recortada e colada facilmente e poderá ser reduzida a uma sequência de caracteres não de controle quando encontrada por determinados protocolos ou programas.

Para contornar isso para facilitar o uso, certos utilitários representam a sequência "bruta" com \033(por referência octal), referência hexadecimal \x1bou por referência de caractere especial \e. É o mesmo da maneira que \té interpretada como uma Tab- que, a propósito, também pode ser inserida por Ctrl- i, ou \ncomo nova linha ou Entertecla, que também pode ser inserida por Ctrl- m.

Então, quando Gilles diz:

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

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

Quando Demizey diz

^ [é apenas uma representação de ESCAPE e \ e é interpretado como um caractere ESCAPE real

Ele significa semanticamente, mas se você pressionar Ctrl- v Ctrl- [este é exatamente o mesmo que \e, a sequência inserida crua provavelmente será tratado da mesma maneira, mas isso nem sempre é garantido, e por isso recomenda-se usar a programação mais portátil \eou 0x1bou \033dependendo no idioma / shell / utilitário que está sendo usado.

Drav Sloan
fonte
4

Todas essas são representações desse personagem que alguns softwares ou humanos usam. Eu listei os mais comuns. Se você estiver falando com um humano, use o que ele entender. (Evidentemente, minha tentativa de ter certeza de que você entenderia pelo menos um desses problemas.) Se você estiver falando com software, consulte a documentação para saber o que ele entende.

Em bash, as sequências de escape \e, \033e \x1btrabalho como um argumento para printf, em $'…', em avisos, e em atalhos de teclado. Nas associações de teclas, há uma sintaxe mais geral \C-[que funciona porque o caractere 27 é o que você obtém ao digitar Ctrl+ [(essa sintaxe é uma imitação das associações de teclas do Emacs). \033trabalha em todas as conchas como argumento para printf; os outros contextos e notações dependem do shell.

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

Gilles 'SO- parar de ser mau'
fonte