스크립트에 $“달러 부호 접두어 문자열”이 있다는 것은 무엇을 의미합니까?


81

방금 init 스크립트에서 이것을 보았습니다.

echo $"Stopping Apache"

그 달러 기호는 무엇입니까?

지금까지의 연구 :

나는 이것을 bash 매뉴얼에서 찾았다.

따옴표

설정 한 경우 $'string'$"string"인용은 내에서 수행되는 ${parameter}큰 따옴표로 묶어야 확장. 이 옵션은 기본적으로 활성화되어 있습니다.

...하지만 $접두사가 있거나 없는 문자열 사이의 차이점을 찾지 못했습니다 .

$ echo "I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in $PWD"
I am in /var/shared/home/southworth/qed
$ echo $"I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo "I am in ${PWD}"
I am in /var/shared/home/southworth/qed
$ echo 'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in ${PWD}'
I am in ${PWD}
$ echo $'I am in $PWD'
I am in $PWD

답변:


111

여기에는 두 가지 다른 일이 있습니다. 둘 다 bash매뉴얼에 설명되어 있습니다.

$ '

달러 기호 작은 따옴표는 인용의 특별한 형태입니다.

ANSI C 인용

$ 'string'형식의 단어는 특별히 취급됩니다. ANSI C 표준에 지정된대로 백 슬래시 이스케이프 문자를 바꾸어 단어를 문자열로 확장합니다.

$ "

달러 기호 큰 따옴표는 현지화입니다.

로케일 번역

큰 따옴표로 묶은 문자열 앞에 달러 기호 ( '$')가 있으면 문자열이 현재 로케일에 따라 변환됩니다. 현재 로케일이 C 또는 POSIX 인 경우 달러 기호는 무시됩니다. 문자열이 번역 및 교체되면 교체는 큰 따옴표로 묶습니다.


22

문자열이에서 확장 $''되면 이스케이프 시퀀스가 ​​해석됩니다. 맨 페이지에서 :

Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by  the
ANSI  C  standard.

쉬운 예는 개행에 대한 \ n 이스케이프 시퀀스입니다.

$ echo 'foo\n'
foo\n
$ echo $'foo\n'
foo

$ 

참고 : echo옵션을 제공하지 않고 이스케이프 시퀀스를 해석 할 수 있으므로 다른 쉘에서 다른 결과를 얻을 수 있습니다.


8
$"..."질문에 따라에 대한 언급이 없습니다 .
Peter.O

-4

설명서를 잘못 해석하고 있습니다. 달러 (A $) -quoted 문자열 인 경우에만 효과를 볼 수 있습니다 내부${parameter} 확장.

$ echo "${v:-'ab\ncd'}"
'ab\ncd'
$ echo "${v:-$'ab\ncd'}"
ab
cd

출처 및 추가 자료 : https://lists.gnu.org/archive/html/bug-bash/2005-10/msg00017.html


6
이것은 질문에 대답하지 않습니다 : $"…"다른 것입니다.
Gilles

4
죄송하지만 답변이 잘못되었습니다. ${}ANSI 인용 을 사용하기 위해 확장을 사용할 필요가 없습니다 . 자신을 확인하십시오 :echo $'ab\ncd'
rozcietrzewiacz

1
이 답변이 extquote질문의 내용 대신 잘못 설명하려고 시도한 것 같습니다 .
jw013

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