bash에서 작은 따옴표로 묶인 $ ‘string’과 큰 따옴표로 묶인 $“string”의 차이점은 무엇입니까? is a new line 두 번째

나는 새로운 라인을 실행 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?



답변

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

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


답변

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

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

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

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

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

그러나

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

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

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


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