\e와 ^[의 차이점

\e와 ^[의 차이점

자일스썼다:

문자 27 ​​= 033 = 0x1b = ^[=\e

데미제이썼다:

^[는 ESCAPE를 표현한 것일 뿐이고, \e는 실제 ESCAPE 문자로 해석됩니다.

그러다가 이 줄도 발견했어요과학기술공화국 기사

키 시퀀스를 ^[[24~가 아닌 \e[24~로 작성해야 합니다. 이는 ^[ 시퀀스가 ​​셸에서 \e로 표시되는 [Esc] 키와 동일하기 때문입니다. 예를 들어 키 시퀀스가 ​​^[[OP인 경우 사용할 결과 바인딩 코드는 \e[OP입니다.

하지만 나는 \e 대신 ^[를 사용하는 매핑을 사용해 왔습니다.

그럼 서로 바꿔서 사용할 수 있나요? 언제 다른 것을 사용해야 합니까?

답변1

당신이 보면ANSI ASCII 표준, 문자 집합의 아래쪽 부분(처음 32개)은 "제어 문자"(때때로 "이스케이프 시퀀스"라고도 함)로 예약되어 있습니다. NUL 문자, 라이프 피드, 캐리지 리턴, 탭, 벨 등이 있습니다. 대부분은 Ctrl다른 키와 함께 해당 키를 눌러 시뮬레이션 할 수 있습니다 .

27번째(10진수) 또는 \0338진수 시퀀스 또는 0x1b16진수 시퀀스탈출 시퀀스. 이들은 모두 동일한 제어 순서를 나타냅니다. 다양한 셸, 언어 및 도구는 이 순서를 다양한 방식으로 참조합니다. 그 Ctrl순서는 Ctrl- [이므로 때때로 ^[^약어 로 표현됩니다 Ctrl.

명령줄에서 -를 사용하여 Ctrl일련의 제어 문자를 원시 시퀀스로 입력 할 수 있습니다 v. Ctrl- v대부분의 셸과 프로그램의 경우 다음 키 시퀀스 해석을 중지하고 원시 형식으로 삽입하세요. Escape키를 사용하여 Ctrl이 작업을 수행 하면 v대부분의 쉘에서와 같이 나타납니다 ^[. 그러나 이 시퀀스는 해석되지만 쉽게 잘라내어 붙여넣을 수 없으며 특정 프로토콜이나 프로그램에서 접할 때 비제어 문자 시퀀스로 축소될 수 있습니다.

이 문제를 해결하고 사용하기 쉽게 만들기 위해 일부 유틸리티에서는 \033(8진수 참조를 통해), 16진수 참조 \x1b또는 특수 문자 참조를 사용하여 "원시" 시퀀스를 나타냅니다 \e. 이는 \t- 와 거의 같은 방식으로 해석됩니다. 그런데 Tab- Ctrl를 사용하여 입력 할 수도 있고 i, \n개행 문자나 키( - 를 사용하여 입력 Enter할 수도 있음) 로 해석할 수도 있습니다 .Ctrlm

그래서 Giles가 이렇게 말했습니다.

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

그는 ASCII 10진수 27, 8진수 33, 16진수 1b에 대해 이야기하고 있습니다. Ctrl모두 동일 [하며 \e의미상 모두 동일한 것을 참조한다는 의미입니다.

데미지가 말했을 때

^[는 ESCAPE를 표현한 것일 뿐이고, \e는 실제 ESCAPE 문자로 해석됩니다.

Ctrl의미론적으로는 의미가 있지만 - 를 누르면 원래 삽입 순서가 같은 방식으로 처리될 가능성이 높지만 이것이 항상 보장되는 것은 아니므로 프로그래밍 방식으로 이식성이 더 높은 v Ctrl또는 [다음 과 같은 방법을 사용 하는 것이 좋습니다. 사용되는 언어/셸/유틸리티.\e\e0x1b\033

답변2

이들 모두는 특정 사람들이 사용하는 특정 소프트웨어나 역할을 나타냅니다. 가장 일반적인 것들을 나열해봤습니다. 어떤 사람과 대화할 때, 그들이 이해할 수 있는 것은 무엇이든 사용하세요. (분명히 이 중 적어도 하나를 이해했는지 확인하려는 시도는 역효과를 냈습니다.) 소프트웨어와 대화하는 경우 설명서를 확인하여 소프트웨어가 무엇을 이해하는지 확인하십시오.

Bash에서는 이스케이프 시퀀스 \e\033가 프롬프트 및 키 바인딩의 인수로 사용됩니다 \x1b. 키 바인딩에서는 문자 27이 +를 입력하여 얻어지기 때문에 보다 일반적인 구문을 사용할 수 있습니다(구문은 Emacs 키 바인딩을 모델로 합니다). ; 인수는 모든 쉘에 적용됩니다. 다른 컨텍스트와 기호는 셸에 따라 다릅니다.printf$'…'\C-[Ctrl[\033printf

Screen은 이러한 이스케이프 시퀀스를 인식하지 못하지만 이를 ^제어 접두사로 인식하므로 ^[문자 27을 나타냅니다.

관련 정보