$'

$'

방금 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

답변1

여기서는 두 가지 다른 일이 발생하며 둘 다 bash매뉴얼 에 문서화되어 있습니다.

$'

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

ANSI C 견적

$'string' 형식의 단어는 특별하게 처리됩니다. 단어는 ANSI C 표준에 지정된 대로 대체된 백슬래시 이스케이프 문자를 사용하여 문자열로 확장됩니다.

$”

현지화에는 달러 기호 큰따옴표가 사용됩니다.

로케일 번역

달러 기호('$') 앞에 큰따옴표가 붙은 문자열을 사용하면 해당 문자열이 현재 로케일에 따라 번역됩니다. 현재 로케일이 C 또는 POSIX인 경우 달러 기호는 무시됩니다. 문자열이 번역되어 바뀌면 대체 내용이 큰따옴표로 묶입니다.

답변2

이스케이프 시퀀스는 문자열이 내부적으로 확장될 때 $''해석됩니다 . 맨페이지에서:

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참고: 다른 셸에서는 제공된 옵션 없이 이스케이프 시퀀스가 ​​해석될 수 있으므로 다른 결과를 얻을 수 있습니다 .

답변3

매뉴얼을 잘못 이해하셨어요. $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

관련 정보