bash에서 작은 따옴표로 묶은 문자열에서 아포스트로피를 어떻게 피합니까?


18

bash가 작은 따옴표로 묶은 문자열에서 아포스트로피 문자 이스케이프를 평가하는 방법을 이해하지 못합니다.

예를 들면 다음과 같습니다.

$ echo ''\''Hello World'\'''
'Hello World' # works

$ echo '\'Hello World\''
 > # expects you to continue input

이것에 대한 설명을 찾으려고했지만 아무것도 얻을 수 없었습니다. bash는 여기서 무엇을하고 있습니까?


echo \''Hello World'\'
수학

답변:


19

작은 따옴표로 이스케이프 할 수 없습니다. 작은 따옴표에 작은 따옴표를 포함시키는 방법은 없습니다. man bash 인용 을 참조하십시오 .


1
네가 옳아. 트릭은 '백 슬래시가 앞에 있어도 작은 따옴표 사이에 작은 따옴표가 발생하지 않을 수 있습니다'라는 줄에 있습니다.
Kibet

@Colin 작은 따옴표가 다른 두 개의 작은 따옴표 안에 있지만 (역 슬래시) 따옴표는 더 이상 실제 따옴표가 아닙니다. 특별한 페어링 특성이없는 문자 일뿐입니다.
zero2cx

1
@ zero2cx : 사실이 아님 :echo '\''
choroba

@ zero2cx : "내부"대신 "외부"라고 말하고 싶습니다.
choroba

3
@choroba는 "완전히"사실이 아니며, bash에서 할 수있다echo $'\'hello world\''
bufh

9

POSIX 지원 단일 인용 부호와 이중 인용 부호 외에 bash 외에도 따옴표 붙은 문자열에 작은 이스케이프 문자 (작은 따옴표 포함)를 허용하는 추가 따옴표 유형을 제공합니다.

$ echo $'\'Hello World\''
'Hello World'

bash매뉴얼 페이지의 섹션 끝 부분에있는 QUOTING 섹션을 참조하십시오 . ( "ANSI C"를 검색하십시오.)


3

이스케이프 된 아포스트로피에서 발생하는 상황을 설명하기 위해 두 번째 예를 살펴 보겠습니다 ( 작은 따옴표 또는 강한 따옴표 참조 ).

$ echo '\'Hello World\''
>     # expects you to continue input

여기에서 언급 한대로 견적을 남겼습니다. 이제 끝을 자르고 다음으로 변경하십시오.

                     v                                v           v
$ echo '\'Hello World     # Echo two strings: '\' and 'Hello World'.
\Hello World         ^

은 "Hello World」의 하위 문자열을 여기에 인용하지만 행동하지 않은 것처럼 이 강한 인용되었다. 예제를 다시 사용하여 이번에는 끝을 다르게 다듬습니다.

                     vv                                    v (plain apostrophe)
$ echo '\'Hello World\'   # Will echo: '\' and 'Hello World''
\Hello World'        ^^   # Note that the trailing ' char is backslash escaped. 

"Hello World"하위 문자열은 끝 부분에 추가 된 아포스트로피 (이스케이프 처리되었으므로 더 이상 작은 따옴표가 아님)와 함께 강력한 따옴표처럼 다시 작동합니다.

다른 작은 따옴표가 끝에 추가되면 (원래 예제) 문자열은 교수형 상태로 유지되고 인용을 기다립니다.


3

쉘에서 따옴표를 이스케이프 처리하는 간단한 예 :

$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc

이미 열린 하나를 닫고 ( ') 이스케이프 된 하나를 배치 \'하여 인쇄 한 다음 다른 하나를 열면 (' ).

또는

$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc

이미 열린 하나 ( ') 를 마무리 하고 다른 따옴표 ( "'")에 따옴표 를 넣은 다음 다른 따옴표 ( )를 열면 '됩니다.

당신이 한 일은 '\'Hello World\'':

  1. 첫 번째 아포스트로피 개설 : '.
  2. 바로 뒤에 닫히 \'므로 문자열은 다음과 같습니다 '\'.
  3. Hello World 따옴표가 아닙니다.
  4. 독립형 아포스트로피 ( \')를 열지 않고 배치 했습니다.
  5. 마지막 아포스트로피 ( ')가 문자열을 여는 중이지만 닫는 문자열이 없습니다.

올바른 예는 다음과 같습니다.

$ echo \'Hello World\'
'Hello World'

관련 : 작은 따옴표로 묶은 문자열에서 작은 따옴표를 이스케이프 처리하는 방법은 무엇입니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.