bash에서 작은 따옴표로 묶인 $ 'string'과 큰 따옴표로 묶인 $“string”의 차이점은 무엇입니까?


9

나는 새로운 라인을 실행 echo하려고 시도하고 다음 두 명령을 시도했다.

  1. 첫 번째 명령 :

    echo $'Hello World\nThis is a new line'

    응답:

    Hello World
    This is a new line
  2. 두 번째 명령 :

    echo $"Hello World\nThis is a new line"

    응답:

    Hello World\nThis is a new line

내 질문에 싸여 문자열의 차이 무엇이다 $' '싸서 문자열 대 $" "에서 bash의이 echo?


유용한 정보 : 큰 따옴표는 약한 따옴표로, 작은 따옴표는 강한 따옴표로도 알려져 있습니다.
Rafaf Tahsin

2
네,하지만 "weak quote"'strong quote'는 다른 $'C String'$"I18N String".
DopeGhoti

당신은 진짜 MVP입니다. : D >>> @DopeGhoti
Rafaf Tahsin

나는 내가 할 수있는 일을한다 (:
DopeGhoti

답변:


10

여기 에 설명 된대로 구문 은 개행 $'string'과 같이 마술 이스케이프 문자가 포함 된 C 스타일 문자열을 지정합니다 \n. $"string"마법의 탈출구가없는 I18N 확장 용입니다.

이것들은 더 일반적인 "string"(약한 인용) 및 'string'(강한 인용) 과 구별됩니다 .


9

$문자열의 시작 부분에서 :

echo $'Hello World\nThis is a new line'

이스케이프 시퀀스를 해석합니다.

배시 참조 설명서 [말한다]

$ 'string'형식의 단어는 특별히 취급됩니다. ANSI C 표준에 지정된대로 백 슬래시 이스케이프 문자를 바꾸어 단어를 문자열로 확장합니다. ..
..
확장 된 결과는 달러 기호가없는 것처럼 작은 따옴표로 묶습니다.

그러나

echo $"Hello World\nThis is a new line"

완전히 다릅니다. 로케일 특정 번역에 대한 이 기사 는 다음과 같이 말합니다.

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


참고 : IIRC 모두 $'string'$"string"다른 조개들 지원을 찾을 수 없습니다. 다른 쉘의 사람들은 호기심을 가지고 그것을 볼뿐만 아니라 스크립트 이식성을 피할 수 있는지에 대해 토론합니다.


1
ksh93또한 이해 $'...'합니다.
Kusalananda

@Kusalananda : 흠, 좋은 참고 :)
sjsam

4
$'xxx'bashism은 아니지만 ksh몇 년 전에 처음 소개되었습니다 bash. 그것은 현재도에서 지원 zshbusybox sh와 POSIX 표준에 의해 검토 중입니다.
jlliagre

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