bash에서 작은 따옴표 $'string'과 큰 따옴표 $"string"의 차이점은 무엇입니까?

bash에서 작은 따옴표 $'string'과 큰 따옴표 $"string"의 차이점은 무엇입니까?

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
    

내 질문은 $' ''s로 묶인 문자열과 's로 묶인 문자열의 차이점은 무엇입니까?$" "bashecho

답변1

설명대로여기, 구문은 개행 $'string'과 같은 매직 이스케이프 문자를 포함하는 C 스타일 문자열을 지정합니다 \n. $"string"I18N 확장의 경우 그러한 마법의 탈출구가 없습니다.

"string"이는 'string'보다 일반적인 (약한 참조) 및 (강한 참조)와는 다릅니다.

답변2

$문자열의 시작 부분 :

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

이스케이프 시퀀스가 ​​해석되도록 합니다.

배쉬 참조 매뉴얼[설명하다]

$'string' 형식의 단어는 특별하게 처리됩니다. 단어는 ANSI C 표준에 지정된 대로 대체된 백슬래시 이스케이프 문자를 사용하여 문자열로 확장됩니다. ..
..
확장된 결과는 마치 달러 기호가 없는 것처럼 작은따옴표로 묶였습니다.

하지만

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

완전히 다릅니다. 이것[ 기사 ]로케일별 번역에 대해 다음과 같이 말합니다.

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


노트:IIRC는 둘 다 서로 다른 쉘 사이에서 지원을 찾지 못할 $'string'수 있습니다 $"string". 다른 쉘의 사람들은 이를 호기심으로 바라볼 뿐만 아니라 스크립트 이식성을 위해 이를 피할 수 있는지에 대해 토론했습니다.

관련 정보