La diferencia entre \ e y ^ [

15

Gilles escribió :

carácter 27 = 033 = 0x1b = ^[=\e

Demizey escribió :

^ [es solo una representación de ESCAPE y \ e se interpreta como un personaje ESCAPE real

Luego también encontré esta línea de un artículo de TechRepublic

Asegúrese de escribir la secuencia de teclas como \ e [24 ~ en lugar de ^ [[24 ~. Esto se debe a que la secuencia ^ [es equivalente a la tecla [Esc], que está representada por \ e en el shell. Entonces, por ejemplo, si la secuencia de teclas fuera ^ [[OP, el código de enlace resultante a usar sería \ e [OP.

Pero he estado usando asignaciones que usan ^ [en lugar de \ e.

Entonces, ¿son intercambiables? ¿Cuándo necesito usar uno en lugar del otro?

Forethinker
fuente

Respuestas:

16

Si observa el estándar ANSI ASCII , la parte inferior del conjunto de caracteres (los primeros 32) son "caracteres de control" reservados (a veces denominados "secuencias de escape"). Estas son cosas como el carácter NUL, Life Feed, Carriage Return, Tab, Bell, etc. La gran mayoría se puede emular presionando la Ctrltecla en combinación con otra tecla.

La \033secuencia número 27 (decimal) u octal, o 0x1bsecuencia hexadecimal es la secuencia de escape. Todas son representaciones de la misma secuencia de control. Diferentes shells, idiomas y herramientas se refieren a esta secuencia de diferentes maneras. Su Ctrlsecuencia es Ctrl- [, por lo tanto, a veces se representa como ^[, ^siendo una mano corta para Ctrl.

Puede ingresar secuencias de caracteres de control como secuencias sin procesar en su línea de comando procediéndolas con Ctrl- v. Ctrl- vPara la mayoría de los shells y programas, se detiene la interpretación de la siguiente secuencia de teclas y, en su lugar, se inserta en su forma sin procesar. Si hace esto con la Escapetecla o Ctrl, vse mostrará en la mayoría de los shells como ^[. Sin embargo, aunque esta secuencia se interpretará, no se cortará y pegará fácilmente, y puede reducirse a una secuencia de caracteres sin control cuando se encuentre con ciertos protocolos o programas.

Para evitar esto y facilitar su uso, ciertas utilidades representan la secuencia "en bruto", ya sea con \033(por referencia octal), referencia hexadecimal \x1bo por referencia de caracteres especiales \e. Esto es muy similar en la forma en que \tse interpreta como un Tab- que por cierto también se puede ingresar a través de Ctrl- i, o \ncomo una nueva línea o la Entertecla, que también se puede ingresar a través de Ctrl- m.

Entonces cuando Gilles dice:

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

Él está diciendo decimal ASCII 27, 33 octal, hexadecimal 1b, Ctrl- [y \eson todos iguales significa que todos ellos se refieren a la misma cosa (semánticamente).

Cuando Demizey dice

^ [es solo una representación de ESCAPE y \ e se interpreta como un personaje ESCAPE real

Lo que quiere decir semánticamente, pero si pulsa Ctrl- v Ctrl- [esto es exactamente lo mismo que \e, la secuencia insertada prima será más probable ser tratado de la misma manera, pero esto no siempre está garantizado, por lo que recomienda el uso de la programación más portátil \eo 0x1bo \033dependiendo en el idioma / shell / utilidad que se utiliza.

Drav Sloan
fuente
4

Todas estas son representaciones de ese carácter que usan algunos programas o algunos humanos. Enumeré los más comunes. Si estás hablando con un humano, usa lo que entiendan. (Evidentemente, mi intento de asegurarme de que entendería al menos uno de estos contraproducentes). Si está hablando con un software, consulte la documentación para saber qué entiende.

En bash, las secuencias de escape \e, \033y \x1bel trabajo como un argumento a printf, en $'…', en indicaciones y en las asociaciones de teclas. En las asociaciones de teclas, hay una sintaxis más general \C-[que funciona porque el carácter 27 es lo que se obtiene al escribir Ctrl+ [(esa sintaxis es una imitación de las combinaciones de teclas de Emacs). \033funciona en todos los shells como argumento para printf; los otros contextos y notaciones dependen del shell.

La pantalla no reconoce ninguna de estas secuencias de escape, pero reconoce ^como el prefijo de control, por lo que ^[significa el carácter 27.

Gilles 'SO- deja de ser malvado'
fuente