'아포스트로피'

'아포스트로피'

"..."때로는 특정 텍스트( , 및 '...') 를 참조하기 위해 다양한 방법을 사용하는 쉘 스크립트를 봅니다 . 왜 그렇게 다양한 종류의 참고문헌이 사용됩니까?$'...'$"..."

그들은 다르게 행동합니까, 아니면 내가 그 안에서 할 수 있는 일에 영향을 줍니까?

답변1

이것들은 모두 다른 것을 의미하며, 그 안에 다른 것을 쓸 수 있습니다(또는 같은 것을 다른 의미로). 다양한 유형의 참조는 그 안에 있는 다양한 이스케이프 시퀀스를 해석하거나( ) 변수 보간( ) 및 그 안에 있는 다른 유형의 확장을 \something허용하거나 허용하지 않습니다 .$something

간단히 말해서:

  • '...'말 그대로.
  • "..."변수 및 삽입된 따옴표 문자가 허용됩니다.
  • $'...'문자 이스케이프를 수행 \n하지만 변수를 확장하지는 않습니다.
  • $"..."Bash 및 ksh에서 인간 언어 번역에 사용됩니다.

'아포스트로피'

작은따옴표 사이에 쓴 내용은 문자 그대로 처리되며 전혀 처리되지 않습니다. 백슬래시와 달러 기호는 특별한 의미가 없습니다. 이는 백슬래시 이스케이프 문자(다른 작은따옴표 포함!), 변수 삽입 또는 기타 쉘 기능을 사용할 수 없음을 의미합니다.

이러한 모든 예는 따옴표 사이에 쓰여진 내용을 문자 그대로 의미하게 됩니다.

암호 결과
'hello world' 안녕하세요 세계
'/pkg/bin:$PATH' /pkg/bin:$PATH
'hello\nworld' 안녕하세요.\n
'`echo abc`' '에코 ABC'
'I\'dn\'t've' 나는 아니에요

마지막 항목은 더 복잡합니다.작은 따옴표로 묶인 문자열은 따옴표가 없는 일부 텍스트와 함께 실행됩니다. 첫 번째에는 가 포함되어 있습니다 I\. 인용되지 않은 텍스트 dn\'t에는 이스케이프된 작은따옴표가 포함되어 있습니다.쉘 레이어에서이므로 따옴표로 묶인 문자열로 시작하지 않고 리터럴 문자로 포함됩니다(따라서 dn't). 마지막으로 인용된 문자열은 ve쉘이 일반적으로 작동하는 방식으로 .all을 하나의 단어로 결합한 것입니다.

리터럴 텍스트와 변수를 결합하는 일반적인 관용어는 다음과 같이 함께 실행하는 것입니다.

'let x="'$PATH\"

결과는 다음과 같습니다

let x="/usr/bin:/bin"

단어로( $PATH경우에 따라 큰따옴표를 사용하는 것이 좋습니다. -변수의 공백 또는 와일드카드다른 방법으로 처리될 수 있음- 그러나 읽기 쉬운 실행 예제를 위해 그렇지 않습니다).


"큰따옴표"

큰따옴표 내에서는 두 확장이 모두 처리되며 백슬래시 이스케이프 문자를 사용하여 확장 또는 이스케이프 처리를 방지할 수 있습니다.

큰따옴표 안에는 두 가지 유형의 확장이 발생합니다.

따옴표 내에서 백슬래시는 $또는 앞에 배치하여 이러한 확장을 억제 할 수 있습니다 `. 또한 닫는 큰따옴표를 이스케이프 처리하여 문자열이나 다른 백슬래시에만 \"포함되도록 할 수도 있습니다. "외부 따옴표 \뒤에 개행 문자가 오는 것처럼 다음과 같이 처리됩니다.줄 연속(효과적으로 삭제됨) 다른 백슬래시는 문자 그대로 유지됩니다. 추가 문자를 생성하기 위해 이스케이프 처리할 수 없으며 제거되지 않습니다.

이러한 예제 중 일부는 이전과 다르게 동작하지만 일부는 그렇지 않습니다.

암호 결과
"hello world" 안녕하세요 세계
"/pkg/bin:$PATH" /pkg/bin:/bin:/usr/bin
"hello\nworld" 안녕하세요.\n
"hello\\nworld" 안녕하세요.\n
"`echo abc`" 알파벳
"I\'dn\'t've" 나는 아니에요
"I'dn't've" 나는 아니에요
"I\"dn\"t've" 나는 아니에요

$'ANSI-C 참조'

이 인용을 사용하면 C 스타일 백슬래시 이스케이프를 처리할 수 있지만아니요변수 또는 대체 항목을 포함합니다.이것은오직문자 이스케이프를 지원하는 참조 유형.

이는 ksh의 확장이며 이제 Bash, zsh 및 기타 셸에서 지원됩니다. 그렇지 않다하지만POSIX 표준의 일부이므로 Max Portable 스크립트에서는 사용할 수 없지만 Bash나 ksh 스크립트에서는 자유롭게 사용할 수 있습니다.

이러한 모든 이스케이프 문자는 C 의미인 , , \a, \b, \f, \n, \r, 및 리터럴 이스케이프 문자 , 및 \t와 함께 사용할 수 있습니다 . 또한 Bash 및 ksh에서 확장 (이스케이프 문자) 및 확장 (입력할 내용) 을 지원합니다.\v\\\'\"\?\e\cxCtrl-x를 통해, 캐리지 리턴 등 \cM). Shell에는 자체적인 작은 확장 세트가 있습니다.

또한 네 가지 일반적인 문자 이스케이프를 허용합니다.

  • \nnn, 8진수 값을 갖는 단일 바이트에 에
  • \xHH, 16진수 값을 가진 단일 바이트헤헤
  • \uHHHH, 16진수 인덱스가 있는 유니코드 코드 포인트하하하하
  • \UHHHHHHHH, 16진수 인덱스가 있는 유니코드 코드 포인트하하하하하하

첫 번째 숫자 뒤의 모든 숫자는 선택 사항입니다.

$의미가 없으며 `문자 그대로 유지되므로 변수가 포함될 수 없습니다.

암호 결과
$'hello world' 안녕하세요 세계
$'/pkg/bin:$PATH' /pkg/bin:$PATH
$'hello\nworld' 안녕하세요
세계
$'`echo abc`' '에코 ABC'
$'I\'dn\'t\'ve' 나는 아니에요
$'\U1f574\u263A'

관련 정보