맨위로가기

이스케이프 시퀀스

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

이스케이프 시퀀스는 컴퓨터와 주변 장치 간의 통신에서 장치 제어를 위해 사용되는 일련의 문자이며, 제어 시퀀스라고도 불린다. 이스케이프 시퀀스는 원래 ASCII 코드 27번(10진수)의 이스케이프 문자로 시작하며, ANSI 터미널의 등장 이후에는 "ESC"와 "["의 두 문자로 시작하거나 CSI 문자로 시작하는 경우가 많다. 이스케이프 시퀀스는 프로그래밍 언어, 터미널 환경, 통신 등 다양한 분야에서 활용되며, 특수 문자를 표현하거나 터미널 화면 제어, 모뎀 제어 등에 사용된다. 프로그래밍 언어에서는 백슬래시를 사용하여 문자열 내의 특수 문자를 이스케이프하는 경우가 일반적이다.

2. 정의 및 기본 개념

이스케이프 시퀀스는 특수한 기능을 수행하거나, 일반적인 문자로 표현하기 어려운 문자를 나타내기 위해 사용되는 문자들의 조합이다. 이스케이프 시퀀스는 컴퓨터와 주변 장치 간의 통신, 프로그래밍 언어, 명령 줄 인터페이스 등 다양한 분야에서 활용된다.

이스케이프 시퀀스는 인밴드 시그널링의 한 예로, 컴퓨터와 주변 장치가 정보를 주고받는 단일 채널에서 정보를 제어하는 데 사용된다. 이스케이프 시퀀스의 기원은 1874년 보도 코드까지 거슬러 올라간다. 헤이즈 명령 집합에서는 ''+++''라는 단일 이스케이프 시퀀스를 사용하는데, 모뎀은 데이터 스트림에서 ''+++''를 만나면 전후 1초 동안 통신을 중단하고 후속 데이터를 명령으로 간주한다.

문자 터미널 환경에서는 ASCII 이스케이프 문자를 수신했을 때, 이것이 사용자가 Esc 키를 누른 것인지, 아니면 이스케이프 시퀀스의 시작인지 구분하기 어려울 수 있다. 전통적으로는 이스케이프 문자 뒤에 다른 문자가 빠르게 오는지 확인하여 구분했지만, 이 방법은 완벽하지 않다.

2. 1. 이스케이프 문자의 역할

프로그래밍 언어와 명령 줄 인터페이스에서 이스케이프 시퀀스는 문자 리터럴과 문자열 리터럴에서 인쇄할 수 없거나 문자 또는 문자열의 구문과 충돌하는 문자를 표현하는 데 사용된다.[3] 예를 들어, 제어 문자 자체는 편집기 프로그램으로 코딩된 프로그램에 배치하는 것이 허용되지 않거나 명령에 입력하면 원치 않는 부작용이 발생할 수 있다.[3] 따옴표 종료 문자도 프로그래머가 이스케이프하여 해결할 수 있는 문제이다.[3] 대부분의 컨텍스트에서 이스케이프 문자는 백슬래시("'''\'''")이다.[3]

C 언어의 문자열 리터럴에서 백슬래시(\, U+005C)로 시작하여 줄 바꿈 코드 등을 표현하는 것이 대표적인 예시이다.[3] 백슬래시 자체를 나타내기 위해 `\\`를 사용할 수 있으며, 여기서 첫 번째 백슬래시는 이스케이프를 나타내고 두 번째 백슬래시는 백슬래시가 이스케이프되고 있음을 지정한다.[5] 문자는 여러 가지 방법으로 이스케이프될 수 있다. ASCII 인코딩을 가정하면 이스케이프 시퀀스 `\x5c`(16진법), `\\` 및 `\134`(8진법)는 모두 동일한 문자, 즉 백슬래시 `\`를 인코딩한다.

또는 파이썬 2의 경우

:

```perl

print "Nancy said "Hello World!" to the crowd.";

```

문법 오류를 발생시키는 반면 다음은:

:

```perl

print "Nancy said \"Hello World!\" to the crowd."; ### example of \"

```

의도된 출력을 표시한다.

다른 대안:

:

```perl

print "Nancy said \x22Hello World!\x22 to the crowd."; ### example of \x22

```

"\x"를 사용하여 다음의 두 문자가 16진 숫자임을 나타내며 "22"는 16진 아스키 값이다.

통신에서 이스케이프 시퀀스는 컴퓨터와 주변 장치가 정보를 주고받는 단일 채널만 가지고 있을 때 일반적으로 사용된다(따라서 이스케이프 시퀀스는 인밴드 시그널링의 한 예이다).

ANSI 이스케이프 시퀀스에 응답하는 장치의 경우, ASCII "escape" 문자(10진수 문자 코드 27)로 시작하여 왼쪽 대괄호 문자 `[`(10진수 문자 코드 91)가 뒤따르는 세 개 이상의 문자의 조합은 이스케이프 시퀀스를 정의한다.

ISO/IEC 2022 (JIS X 0202)에서의 문자 집합 지시/호출 시퀀스 (한자 시프트 코드도 참조), 그리고 ISO/IEC 6429 (ECMA-48, JIS X 0211)의 화면 제어 시퀀스 (소위 "ANSI 이스케이프 시퀀스") 등이 있다.

U+001B 다음에 오는 옥텟 열은 특정 문자 집합에 속하지 않으므로, 원래는 부호표의 행과 열로 기술하지만, 다음 예에서 괄호 안에 표시된 것처럼, 대응하는 ASCII 문자로 기술하는 것도 편의상 널리 사용된다.

  • `ESC 2/8 4/2` (ESC ( B) - ASCII를 G0에 지정한다.
  • `ESC 2/4 4/2` (ESC $ B) - JIS X 0208을 G0에 지정한다.
  • `ESC 5/11 3/2 4/10` ( `ESC [ 2 J` ) - 화면을 지운다.
  • `ESC 5/11 3/11 4/8` ( `ESC [ ; H` ) - 화면상의 제 행 제 열로 커서를 이동한다. ( 및 는 ASCII 숫자 3/0 ~ 3/9로 구성 ).


문자 터미널 화면을 제어하는 이스케이프 시퀀스는 디지털 이큅먼트 코퍼레이션(DEC)의 VT100이 사실상 표준이 되었지만(ANSI 이스케이프 시퀀스는 VT100의 서브셋이다), 제품마다 다양한 사양이 존재한다. 따라서 UNIX의 터미널 정보 데이터베이스(termcap, terminfo)에는 다수의 터미널 화면 제어 이스케이프 시퀀스가 기술되어 있다.

2. 2. 제어 문자와의 비교

제어 문자는 그 자체로 캐리지 리턴(CR)과 같은 제어 기능을 수행하는 문자이다. 반대로 이스케이프 시퀀스는 후속 문자의 해석을 변경하는 하나 이상의 이스케이프 문자로 구성된다.

3. 역사

이스케이프 시퀀스는 적어도 1874년 보도 코드까지 거슬러 올라간다.

3. 1. 초기 컴퓨터 터미널

이스케이프 문자는 일반적으로 컴퓨터 키보드의 Esc 키에 할당되며, 이스케이프 시퀀스의 일부가 아닌 다른 방식으로 전송될 수 있다. 예를 들어, Esc 키는 vi와 같은 편집기에서 입력 문자로 사용될 수 있거나, 일부 응용 프로그램에서 메뉴의 한 단계를 뒤로 이동하는 데 사용될 수 있다. HP 2640 터미널에는 Esc를 포함한 모든 제어 문자에 대한 그래픽을 표시하여 디버깅 응용 프로그램을 지원하는 "디스플레이 기능" 모드 키가 있었다.

문자 터미널 사용 시, Esc 키와 이스케이프 시퀀스를 보내는 다른 키가 모두 응용 프로그램에 의미가 있으면 모호성이 발생한다. 응용 프로그램이 ASCII 이스케이프 문자를 수신하면, 이 문자가 사용자가 Esc 키를 누른 결과인지, 아니면 이스케이프 시퀀스(예: 화살표 키 누름의 결과)의 초기 문자인지 명확하지 않다. 이러한 모호성을 해결하기 위해 전통적으로는 이스케이프 문자 다음에 다른 문자가 빠르게 따라오는지 관찰한다. 그렇지 않은 경우 이스케이프 시퀀스의 일부가 아닌 것으로 간주한다. 그러나 이 휴리스틱은 특히 빠르지 않은 최신 통신 속도에서는 일부 상황에서 실패할 수 있다.

VT52 터미널은 "A"가 단순히 문자 "A"를 의미하는 것처럼, 이스케이프-A와 같은 간단한 디그래프 명령어를 사용했다. 그러나 이스케이프 시퀀스의 일부로서 "이스케이프-A"는 다른 의미를 가졌다. VT52는 또한 매개변수를 지원했는데, 이는 대체로 인코딩된 간단한 제어 언어가 아니었다.

이후의 VT100 터미널은 커서 이동, 문자 집합, 디스플레이 향상과 같은 기능을 위해 더욱 정교한 ANSI 이스케이프 시퀀스 표준(현재 ECMA-48)을 구현했다. 휴렛 팩커드의 HP 2640 시리즈는 블록 및 문자 모드, 프로그래밍 키와 소프트 라벨, 그래픽 벡터, 심지어 테이프 또는 디스크 파일에 데이터를 저장하는 데에 가장 정교한 이스케이프 시퀀스를 가지고 있었다.

3. 2. ANSI 이스케이프 코드의 등장

VT100 터미널은 커서 이동, 문자 집합, 디스플레이 개선 등 여러 기능을 위해 더 정교한 ANSI 이스케이프 시퀀스 표준(현재 ECMA-48)을 구현했다.[1] 휴렛 팩커드의 HP 2640 시리즈는 블록 및 문자 모드, 프로그래밍 키와 소프트 라벨, 그래픽 벡터, 심지어 테이프 또는 디스크 파일에 데이터를 저장하는 데까지 가장 정교한 이스케이프 시퀀스를 사용했다.[1]

4. 주요 사용 분야

이스케이프 시퀀스는 프로그래밍 언어, 터미널 환경, 통신 등 다양한 분야에서 사용된다.

프로그래밍 언어에서는 문자열 리터럴 내에서 특수 문자를 표현하거나, 정규 표현식에서 특수 문자의 기능을 제거하기 위해 사용된다. 예를 들어, C, C++, 자바, 루비 등 많은 프로그래밍 언어에서 백슬래시 (`\`)를 이스케이프 문자로 사용한다.[3] 백슬래시 자체를 표현하려면 `\\`와 같이 두 번 사용한다.[5]

터미널 환경에서는 ANSI 이스케이프 코드를 사용하여 화면 제어, 텍스트 서식, 색상 변경 등을 수행한다. 대부분의 ANSI 이스케이프 시퀀스는 "ESC"와 "[" 두 문자로 시작하거나, 코드 155(10진수)를 가진 CSI 문자로 시작한다.

통신에서는 컴퓨터와 주변 장치가 정보를 주고받는 단일 채널을 사용할 때 이스케이프 시퀀스가 사용된다. 이는 인밴드 시그널링의 한 예이다. 예를 들어, 헤이즈 명령 집합에서는 `+++`를 이스케이프 시퀀스로 사용하여 모뎀의 작동 모드를 전환한다.

4. 1. 프로그래밍 언어

이나 파이썬 2에서 다음 코드는 구문 오류를 발생시킨다.

```perl

print "Nancy said "Hello World!" to the crowd.";

```

반면 다음 코드는 의도한 대로 출력된다.

```perl

print "Nancy said \"Hello World!\" to the crowd."; ### \"의 예시

```

다른 방법으로 다음과 같이 표현할 수도 있다.

```perl

print "Nancy said \x22Hello World!\x22 to the crowd."; ### \x22의 예시

```

여기서 `\x`는 뒤따르는 두 문자가 16진수 숫자임을 나타내며, "22"는 16진수로 큰따옴표의 ASCII 값이다.

C, C++, 자바, 루비에서는 모두 동일한 두 가지 백슬래시 이스케이프 스타일을 허용한다.[3] C에서 백슬래시 자체를 나타내려면 `\\`를 사용한다. 여기서 첫 번째 백슬래시는 이스케이프를 나타내고, 두 번째 백슬래시는 이스케이프되는 문자가 백슬래시임을 지정한다.[5] ASCII 인코딩을 가정할 때, `\x5c`(16진법), `\\`, `\134`(8진법)는 모두 백슬래시(`\`) 문자를 나타낸다.

PostScript 언어와 마이크로소프트 Rich Text Format에서도 백슬래시 이스케이프를 사용한다. quoted-printable 인코딩은 등호를 이스케이프 문자로 사용한다.

URL 및 URI는 퍼센트 인코딩을 사용하여 특수한 의미를 가진 문자를 인용하며, 이는 비ASCII 문자에 사용된다.

일부 프로그래밍 언어는 이스케이프 문자 없이 특수 문자를 리터럴로 표현하는 다른 방법을 제공하기도 한다. (예: 구분자 충돌 참조)

4. 1. 1. 문자열 리터럴에서의 사용

많은 프로그래밍 언어와 명령줄 인터페이스에서 이스케이프 시퀀스는 문자 리터럴과 문자열 리터럴에서 인쇄할 수 없거나 문자 또는 문자열의 구문과 충돌하는 문자를 표현하는 데 사용된다. 예를 들어, 제어 문자 자체는 편집기 프로그램으로 코딩된 프로그램에 배치하는 것이 허용되지 않거나, 명령에 입력하면 원치 않는 부작용이 발생할 수 있다. 또한, 프로그래머는 문자열 리터럴 안에서 따옴표 종료 문자를 표현해야 할 때 이스케이프 시퀀스를 사용하여 문제를 해결할 수 있다. 대부분의 경우 이스케이프 문자는 백슬래시("\")이다.

예를 들어, 작은따옴표 문자는 `'\''`와 같이 표현할 수 있다. `'''`처럼 작은따옴표 세 개를 연달아 쓰는 것은 허용되지 않기 때문이다.

많은 현대 프로그래밍 언어에서는 큰따옴표 문자(`"`)를 문자열 리터럴의 구분자로 사용한다. 이때 백슬래시 이스케이프 문자를 사용하면 문자열 리터럴 내에 큰따옴표를 포함할 수 있다. 예를 들어 `\"`처럼 문자열에 포함된 큰따옴표 문자의 의미를 변경하거나, `\x22`처럼 큰따옴표 문자의 16진수 값을 이용하여 표현할 수 있다. 이 두 가지 표현 방식은 모두 리터럴 큰따옴표(`"`)를 나타낸다.

Perl 또는 파이썬 2에서 다음 코드는 구문 오류를 발생시킨다.

```perl

print "Nancy said "Hello World!" to the crowd.";

```

반면 다음 코드는 의도한 대로 출력된다.

```perl

print "Nancy said \"Hello World!\" to the crowd."; ### 예시 of \"

```

다음과 같은 대안도 가능하다.

```perl

print "Nancy said \x22Hello World!\x22 to the crowd."; ### 예시 of \x22

```

여기서 `\x`는 뒤따르는 두 문자가 16진수 숫자임을 나타내며, "22"는 16진수로 큰따옴표의 ASCII 값이다.

C, C++, 자바, 루비에서는 동일한 두 가지 백슬래시 이스케이프 스타일을 모두 허용한다.[3] PostScript 언어와 마이크로소프트 Rich Text Format에서도 백슬래시 이스케이프를 사용한다. quoted-printable 인코딩은 등호를 이스케이프 문자로 사용한다.

C에서 백슬래시 자체를 나타내려면 `\\`를 사용한다. 여기서 첫 번째 백슬래시는 이스케이프를 나타내고, 두 번째 백슬래시는 이스케이프되는 문자가 백슬래시임을 지정한다.[5] ASCII 인코딩을 가정할 때, `\x5c`(16진법), `\\`, `\134`(8진법)는 모두 백슬래시(`\`) 문자를 나타낸다.

일부 프로그래밍 언어는 이스케이프 문자 없이 특수 문자를 리터럴로 표현하는 다른 방법을 제공하기도 한다. (예: 구분자 충돌 참조)

4. 1. 2. 정규 표현식에서의 사용

정규 표현식에서 특수 문자를 표현하기 위해 이스케이프 시퀀스가 사용된다. 예를 들어, C 언어와 여러 파생 프로그래밍 언어에서 문자열 이스케이프 시퀀스는 백슬래시 `\`로 시작하는 두 개 이상의 문자 시퀀스이다.[3] 백슬래시 자체를 나타내기 위해서는 `\\`를 사용하는데, 여기서 첫 번째 백슬래시는 이스케이프를 나타내고 두 번째 백슬래시는 백슬래시가 이스케이프되고 있음을 지정한다.[5] 문자는 여러 가지 방법으로 이스케이프될 수 있다. ASCII 인코딩을 가정하면 이스케이프 시퀀스 `\x5c`(16진법), `\\` 및 `\134`(8진법)는 모두 동일한 문자인 백슬래시 `\`를 인코딩한다.

4. 2. 터미널 환경

텍스트 터미널 및 콘솔 환경에서 화면 제어, 텍스트 서식 지정, 색상 변경 등을 위해 ANSI 이스케이프 코드가 사용된다. 대부분의 이스케이프 시퀀스는 "ESC"와 "["의 두 문자로 시작하거나, 코드 155(10진수)를 가진 '''CSI''' 문자로 시작한다.[6]

통신에서 이스케이프 시퀀스는 컴퓨터와 주변 장치가 정보를 주고받는 단일 채널만 가지고 있을 때 일반적으로 사용되었다.(인밴드 시그널링의 예).

이스케이프 시퀀스는 적어도 1874년 보도 코드까지 거슬러 올라간다. 대표적인 예시로는, ISO/IEC 2022 (JIS X 0202)에서의 문자 집합 지시/호출 시퀀스, 그리고 ISO/IEC 6429 (ECMA-48, JIS X 0211)의 화면 제어 시퀀스 (소위 "ANSI 이스케이프 시퀀스") 등이 있다.

디지털 이큅먼트 코퍼레이션(DEC)의 VT100 터미널이 사실상 표준이 되면서, 문자 터미널 화면을 제어하는 이스케이프 시퀀스도 널리 사용되었다. 그러나 제품마다 다양한 사양이 존재한다.

4. 2. 1. ANSI 이스케이프 코드

이후의 VT100 터미널은 커서 이동, 문자 집합, 디스플레이 향상과 같은 기능을 위해 더욱 정교한 ANSI 이스케이프 시퀀스 표준(현재 ECMA-48)을 구현했다.[6] 대표적인 예로, ISO/IEC 6429 (ECMA-48, JIS X 0211)의 화면 제어 시퀀스, 소위 "ANSI 이스케이프 시퀀스"가 있다.

U+001B 다음에 오는 옥텟 열은 특정 문자 집합에 속하지 않으므로, 원래는 부호표의 행과 열로 기술하지만, 다음 예에서 괄호 안에 표시된 것처럼, 대응하는 ASCII 문자로 기술하는 것도 편의상 널리 사용된다.

  • `ESC 5/11 3/2 4/10` ( `ESC [ 2 J` ) - 화면을 지운다.
  • `ESC 5/11 3/11 4/8` ( `ESC [ ; H` ) - 화면상의 제 행 제 열로 커서를 이동한다. ( 및 는 ASCII 숫자 3/0 ~ 3/9로 구성 ).


문자 터미널 화면을 제어하는 이스케이프 시퀀스는 디지털 이큅먼트 코퍼레이션(DEC)의 VT100이 사실상 표준이 되었지만(ANSI 이스케이프 시퀀스는 VT100의 서브셋이다), 제품마다 다양한 사양이 존재한다. 따라서 UNIX의 터미널 정보 데이터베이스(termcap, terminfo)에는 다수의 터미널 화면 제어 이스케이프 시퀀스가 기술되어 있다.

4. 2. 2. 윈도우 콘솔과 ANSI.SYS

ANSI.SYS 유틸리티를 사용하면 DOS ($e를 PROMPT 명령에 사용하여) 또는 16비트 Windows의 명령 창에서 ANSI(ECMA-48) 터미널 이스케이프 시퀀스를 해석할 수 있다.[6] GUI 응용 프로그램이 증가하여 디스플레이 카드에 직접 쓰기 때문에, 마이크로소프트 플랫폼에서 이스케이프 시퀀스의 사용이 크게 줄었지만, printf와 같은 문자 기반 라이브러리 루틴을 사용하여 GUI 프로그램에 의존하지 않고 대화형 임의 접근 문자 기반 화면 인터페이스를 만들 수 있다.

  • `ESC 5/11 3/2 4/10` ( `ESC [ 2 J` ) - 화면을 지운다.
  • `ESC 5/11 3/11 4/8` ( `ESC [ ; H` ) - 화면상의 제 행 제 열로 커서를 이동한다. ( 및 는 ASCII 숫자 3/0 ~ 3/9로 구성 ).

4. 2. 3. 리눅스/유닉스 터미널

VT100 터미널은 커서 이동, 문자 집합, 디스플레이 개선과 같은 기능을 위해 ANSI 이스케이프 시퀀스 표준(현재 ECMA-48)을 구현했다. 기본 텍스트 터미널 및 텍스트 창(예: xterm)은 ANSI 이스케이프 시퀀스에 응답한다. 대표적인 예시는 다음과 같다.

  • `ESC [ 2 J`: 화면을 지운다.
  • `ESC [ ; H`: 화면상의 제 행 제 열로 커서를 이동한다.


문자 터미널 화면을 제어하는 이스케이프 시퀀스는 디지털 이큅먼트 코퍼레이션(DEC)의 VT100이 사실상 표준이 되었지만(ANSI 이스케이프 시퀀스는 VT100의 서브셋이다), 제품마다 다양한 사양이 존재한다. 따라서 UNIX의 터미널 정보 데이터베이스(termcap, terminfo)에는 다수의 터미널 화면 제어 이스케이프 시퀀스가 기술되어 있다.

4. 3. 통신

이 일련의 문자는 지시를 받으면 일반적인 데이터 바이트처럼 표시되거나 인쇄되는 대신 컴퓨터와 연결된 주변 장치의 상태를 변경하는 데 사용되며, 장치 제어에 사용되는 것을 반영하여 '''제어 시퀀스'''라고도 한다. 원래는 "이스케이프 문자" ASCII 코드인 제어 시퀀스 시작자(문자 27, 10진수)로 시작하며, 종종 키캡에 "Esc"로 표시된다.

ANSI 터미널이 도입되면서 대부분의 이스케이프 시퀀스는 "ESC"와 "["의 ''두'' 문자로 시작하거나, 코드 155(10진수)를 가진 특별히 할당된 '''CSI''' 문자로 시작했다.

모든 제어 시퀀스가 이스케이프 문자를 사용한 것은 아니다. 예를 들어, AT/Hayes 호환 모뎀에서 사용되는 모뎀 제어 시퀀스, 데이터 제너럴 터미널 제어 시퀀스 등이 있다. 하지만 여전히 이스케이프 시퀀스라고 불리는 경우가 많았으며, 오늘날 프로그래밍 언어와 명령줄 매개변수에서 특수 문자를 "이스케이핑"하는 매우 일반적인 방식은 시퀀스를 시작하기 위해 "백슬래시" 문자를 사용한다.

이스케이프 문자는 일반적으로 컴퓨터 키보드의 Esc 키에 할당되며, 이스케이프 시퀀스의 일부가 아닌 다른 방식으로 전송될 수 있다. 예를 들어, Esc 키는 vi와 같은 편집기에서 입력 문자로 사용될 수 있거나, 일부 응용 프로그램에서 메뉴의 한 단계를 뒤로 이동하는 데 사용될 수 있다. HP 2640 터미널에는 Esc를 포함한 모든 제어 문자에 대한 그래픽을 표시하여 디버깅 응용 프로그램을 지원하는 "디스플레이 기능" 모드 키가 있었다.

문자 터미널 사용 시 Esc 키와 이스케이프 시퀀스를 보내는 다른 키가 모두 응용 프로그램에 의미가 있어야 하는 경우 모호성이 발생한다. 응용 프로그램이 ASCII 이스케이프 문자를 수신하면 해당 문자가 사용자가 Esc 키를 누른 결과인지, 아니면 이스케이프 시퀀스(예: 화살표 키 누름의 결과)의 초기 문자인지 명확하지 않다. 모호성을 해결하는 전통적인 방법은 이스케이프 문자 다음에 다른 문자가 빨리 따르는지 여부를 관찰하는 것이다. 그렇지 않은 경우, 이스케이프 시퀀스의 일부가 아닌 것으로 간주한다. 이 휴리스틱은 특히 빠르지 않은 최신 통신 속도에서는 일부 상황에서 실패할 수 있다.

이스케이프 시퀀스는 적어도 1874년 보도 코드까지 거슬러 올라간다.

4. 3. 1. 모뎀 제어

헤이즈 명령 집합은 단일 이스케이프 시퀀스인 ''+++''를 정의한다. ''+++''를 데이터의 일부가 아닌 이스케이프 시퀀스로 해석하려면, 송신자는 ''+++'' 전후에 1초 동안 통신을 중단해야 한다. 모뎀은 데이터 스트림에서 ''+++''를 만나면, 모든 문자를 전화로 전송하는 일반 작동 모드에서 벗어나 후속 데이터를 명령 언어의 일부로 간주하는 명령 모드로 전환한다. O 명령을 보내면 ''온라인 모드''로 다시 전환할 수 있다.

헤이즈 명령 집합은 모달 방식이므로, 명령과 데이터가 빠르게 전환되는 경우에는 적절하지 않다. 비모달 이스케이프 시퀀스 제어 언어의 예로는 VT100이 있으며, 제어 시퀀스 도입자로 시작하는 일련의 명령을 사용한다.

4. 3. 2. 인밴드 시그널링

통신에서 이스케이프 시퀀스는 컴퓨터와 주변 장치가 정보를 주고받는 단일 채널만 가지고 있을 때 일반적으로 사용되며, 이는 인밴드 시그널링의 한 예이다. 이는 대부분의 덤 터미널이 통신에 7 데이터 비트의 ASCII를 사용했을 때 일반적이었으며, 때로는 7 데이터 비트에서 사용할 수 있는 128개 코드로 제한될 수 있는 "외국" 또는 그래픽 문자를 위해 다른 문자 집합으로 전환하는 데 사용되기도 했다.

5. 인용/이스케이프 (Quoting Escape)

이나 파이썬 2에서 문자열 내에 큰따옴표(")를 표현하려면 이스케이프 문자를 사용해야 한다. 예를 들어, "Nancy said "Hello World!" to the crowd."를 출력하려면 다음과 같이 한다.

```perl

print "Nancy said \"Hello World!\" to the crowd."; ### \"의 예시

```

여기서 `\"`는 큰따옴표를 문자열 내에 포함시키기 위한 이스케이프 시퀀스이다.

다른 방법으로, 16진수 ASCII 값을 사용할 수 있다.

```perl

print "Nancy said \x22Hello World!\x22 to the crowd."; ### \x22의 예시

```

`\x22`는 큰따옴표의 16진수 ASCII 값을 나타낸다.

CMD에서는 캐럿(`^`)을 보조 이스케이프 문자로 사용하여 특수 문자를 표현할 수 있다. 예를 들어, 앰퍼샌드(&)는 CMD에서 특별한 의미를 가지므로, 문자열 내에 앰퍼샌드를 포함시키려면 다음과 같이 캐럿을 사용한다.

```cmd

echo You can do so via Cut^&Paste

5. 1. 개요

인용/이스케이프 문자열 내에서 이스케이프 문자가 필요할 때, 프로그래밍 및 스크립팅 언어에서 두 가지 전략이 사용된다.

  • 구분 기호를 두 번 반복
  • 보조 이스케이프 시퀀스


후자의 예로 캐럿(`^`)을 사용한다. 예를 들어, CMD에서 "You can do so via Cut^&Paste"를 출력한다. (그렇지 않으면 앰퍼샌드는 제한된 용도로 사용된다)

5. 2. 상세 설명

이나 파이썬 2에서 다음 코드는 문법 오류를 발생시킨다.

```perl

print "Nancy said "Hello World!" to the crowd.";

```

그러나 다음 코드는 의도한 출력을 생성한다.

```perl

print "Nancy said \"Hello World!\" to the crowd."; ### example of \"

```

또 다른 대안은 다음과 같다.

```perl

print "Nancy said \x22Hello World!\x22 to the crowd."; ### example of \x22

```

여기서 `\x`는 뒤따르는 두 문자가 16진수 숫자임을 나타내며, "22"는 큰따옴표의 ASCII 값(16진수)이다.

프로그래밍 및 스크립팅 언어에서 인용/이스케이프 문자열 내에 이스케이프 문자가 필요할 때, 두 가지 전략이 사용된다.

  • 두 번 반복된 구분 기호 (예: `He didn''t do it.`)
  • 보조 이스케이프 시퀀스


후자의 예로는 캐럿(`^`)을 사용하는 경우가 있다. 예를 들어, CMD에서 "You can do so via Cut&Paste"를 출력하려면 다음과 같이 한다. (앰퍼샌드(&)는 제한된 용도로 사용된다)

```cmd

echo You can do so via Cut^&Paste

```

이스케이프 시퀀스의 일반적인 용도는 바이너리 데이터 스트림에서 발견된 제어 문자를 제거하여 실수로 제어 기능을 유발하지 않도록 하는 것이다. 이때 제어 문자는 정의된 "이스케이프 문자"(US-ASCII 이스케이프 문자가 아니어도 됨)와 하나 이상의 다른 문자로 대체된다. 제어 문자가 작업을 유발했을 컨텍스트를 종료한 후, 시퀀스가 인식되어 제거된 문자로 대체된다. "이스케이프 문자" 자체를 전송하려면 두 개의 복사본을 보낸다.

많은 프로그래밍 언어와 명령줄 인터페이스에서 이스케이프 시퀀스는 문자 리터럴과 문자열 리터럴에서 인쇄할 수 없거나 문자 또는 문자열의 구문과 충돌하는 문자를 표현하는 데 사용된다. 예를 들어, 제어 문자 자체는 편집기 프로그램으로 코딩된 프로그램에 배치하는 것이 허용되지 않거나, 명령에 입력하면 원치 않는 부작용이 발생할 수 있다. 따옴표 종료 문자 또한 프로그래머가 이스케이프를 통해 해결할 수 있는 문제이다. 대부분의 컨텍스트에서 이스케이프 문자는 백슬래시('''\''')이다.

예를 들어, 작은따옴표 문자는 `'\''`로 표현할 수 있는데, `'''`를 쓰는 것은 허용되지 않기 때문이다.

많은 현대 프로그래밍 언어는 큰따옴표 문자(`"`)를 문자열 리터럴의 구분자로 지정한다. 백슬래시 이스케이프 문자는 일반적으로 문자열 리터럴 내에 큰따옴표를 포함하는 방법을 제공하며, 문자열에 포함된 큰따옴표 문자의 의미를 수정(`\"`)하거나, 큰따옴표 문자의 16진수 값을 포함하는 일련의 문자의 의미를 수정(`\x22`)하는 방식이 있다. 두 시퀀스 모두 리터럴 큰따옴표(`"`)를 인코딩한다.

C, C++, 자바, 루비는 모두 정확히 동일한 두 가지 백슬래시 이스케이프 스타일을 허용한다. PostScript 언어와 마이크로소프트 Rich Text Format 또한 백슬래시 이스케이프를 사용한다. quoted-printable 인코딩은 등호를 이스케이프 문자로 사용한다.

URL 및 URI는 퍼센트 인코딩을 사용하여 특수한 의미를 가진 문자를 인용하며, 이는 비ASCII 문자에 사용된다.

이와 유사하면서도 부분적으로 겹치는 또 다른 구문 트릭은 스트로핑이다.

일부 프로그래밍 언어는 이스케이프 문자를 필요로 하지 않고 리터럴에서 특수 문자를 표현하는 다른 방법도 제공한다 (예: 구분자 충돌 참조).

6. 한국어 환경에서의 특수성

한국어 환경에서는 이스케이프 시퀀스와 관련하여 몇 가지 특수한 문제점이 발생할 수 있는데, 이는 주로 한국어 문자 인코딩 방식과 관련이 깊다.

과거 한국어 윈도우에서 널리 쓰이던 EUC-KR 인코딩은 백슬래시(`\`) 문자의 코드값(0x5C)을 '원' 통화 기호(₩)로 표현했다. 이 때문에 EUC-KR 환경에서 작성된 소스 코드나 텍스트 파일에서 백슬래시가 필요한 부분에 원 기호가 대신 들어가 있는 경우가 종종 있었다. 이는 혼란을 야기하고, 특히 다른 인코딩 환경(예: UTF-8)에서 파일을 열 때 문제를 일으킬 수 있었다.

현대의 대부분의 환경에서는 UTF-8 인코딩이 표준으로 자리 잡았고, UTF-8에서는 백슬래시와 원 기호가 서로 다른 코드값을 가지므로 이러한 문제가 발생하지 않는다. 그러나 여전히 과거에 작성된 코드나 문서를 다룰 때, 또는 EUC-KR 환경에서 작업해야 할 때는 이러한 차이점을 인지하고 주의해야 한다.

또한, 한국어 폰트 중에는 백슬래시 대신 원 기호 모양으로 글리프(glyph)를 디자인하는 경우가 있다. 이는 코드 편집기나 터미널 등에서 혼동을 줄 수 있으므로, 코딩용 폰트를 사용하거나 설정을 변경하여 백슬래시가 올바르게 표시되도록 하는 것이 좋다.

참조

[1] 웹사이트 Escape Sequence https://www.spss-tut[...]
[2] 웹사이트 Characters https://docs.oracle.[...]
[3] 웹사이트 Escape Sequences https://msdn.microso[...] 2021-08-03
[4] 웹사이트 ISO/IEC 9899:201x Committee Draft N1570 http://www.open-std.[...]
[5] 웹사이트 Escape sequences https://www.ibm.com/[...]
[6] 서적 17. Understanding ANSI.SYS - Special Edition Using MS-DOS 6.22 https://www.oreilly.[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com