Skip to main content

6. 이스케이프 문자

예를 들어 큰따옴표(") 문자를 사용하면 공백 및 탭 문자가 처리되는 방식에 영향을 주는 등 특정 문자는 셸에 중요한 역할을 합니다:

$ echo Hello         World 
Hello World
$ echo "Hello        World" 
Hello        World

그렇다면 Hello       "World"라고 출력하려면 어떻게 해야할까요?

$ echo "Hello    \"World\""

첫 번째와 마지막 " 문자는 두 단어 사이의 간격이 그대로 유지되도록 echo에 전달된 하나의 매개 변수로 전체를 래핑합니다. 하지만 코드:

$ echo "Hello     " World ""

는 세 개의 매개 변수로 해석됩니다:

  • "Hello    "
  • World
  • ""

따라서 출력은 다음과 같습니다.

Hello    World

따옴표가 완전히 손실된다는 점에 유의하세요. 첫 번째와 두 번째 따옴표는 Hello와 그 뒤에 오는 공백을 표시하고, 두 번째 인수는 따옴표로 묶이지 않은 "World"이고, 세 번째 인수는 빈 문자열 ""이기 때문입니다.

이 점을 지적해 주신 Patrick에게 감사드립니다:

$ echo "Hello    "World""

가 실제로 하나의 매개변수(따옴표로 묶인 매개변수 사이에 공백이 없음)이며, 다음과 같이 echo 명령을 (예를 들어) ls로 대체하여 이를 테스트할 수 있습니다.

대부분의 문자(*, ', 등)는 큰따옴표("") 안에 넣어도 해석되지 않습니다(즉, 문자 그대로 받아들여집니다). 이러한 문자는 있는 그대로 호출되는 명령에 전달됩니다. 별표(*)를 사용한 예는 다음과 같습니다:

$ echo *
case.shtml escape.shtml first.shtml 
functions.shtml hints.shtml index.shtml 
ip-primer.txt raid1+0.txt
$ echo *txt
ip-primer.txt raid1+0.txt
$ echo "*"
*
$ echo "*txt"
*txt

첫 번째 예에서 *는 확장되어 현재 디렉터리에 있는 모든 파일을 의미합니다. 두 번째 예에서 *txt는 txt로 끝나는 모든 파일을 의미합니다. 세 번째 예에서는 *를 큰따옴표로 묶어 문자 그대로 해석합니다. 네 번째 예에서는 동일하게 적용되지만 문자열에 txt를 추가했습니다.

그러나 ", $, ` 및 \는 큰따옴표 안에 있더라도 셸에서 해석됩니다. 백슬래시(\) 문자는 이러한 특수 문자를 표시하는 데 사용되므로 셸에서 해석되지 않고 실행 중인 명령(예: echo)에 전달됩니다. 따라서 문자열을 다음과 같이 출력하려면: ($X의 값이 5라고 가정)

A quote is ", backslash is \, backtick is `.
A few spaces are and dollar is $. $X is 5.

다음과 같이 입력해야 합니다:

$ echo "A quote is \", backslash is \\, backtick is \`." 
A quote is ", backslash is \, backtick is `.
$ echo "A few spaces are    ; dollar is \$. \$X is ${X}." 
A few spaces are    ; dollar is $. $X is 5.

" 가 공백을 유지하는 데 특별한 이유를 살펴보았습니다. 달러($)는 변수를 표시하기 때문에 특별한데, $X는 변수 X의 내용으로 셸을 대체합니다. 백슬래시(\)는 그 자체로 다른 문자를 표시하는 데 사용되기 때문에 특별한데, 완전한 셸을 위해서는 다음 옵션이 필요합니다:

$ echo "This is \\ a backslash"
This is \ a backslash
$ echo "This is \" a quote and this is \\ a backslash" 
This is " a quote and this is \ a backslash

따라서 백슬래시 자체를 이스케이프 처리하여 문자 그대로 받아들여야 함을 표시해야 합니다. 다른 특수 문자, 백틱에 대해서는 12장 "외부 프로그램"의 뒷부분에서 설명합니다.