Bash 큰따옴표의 백슬래시 개행 문자를 이해할 수 없습니다.

Bash 큰따옴표의 백슬래시 개행 문자를 이해할 수 없습니다.

~에 따르면그누 문서,

백슬래시는 '$', '`', '"', '\' 또는 줄바꿈 문자 중 하나가 뒤에 오는 경우에만 특별한 의미를 유지합니다. 큰따옴표 내에서 이러한 문자 중 하나가 뒤에 오는 백슬래시는 제거됩니다. .

나는 노력했다

p="a\$b";echo $p  # a$b
p="a\`b";echo $p  # a`b
p="a\"b";echo $p  # a"b
p="a\\b";echo $p  # a\b

다 괜찮아. 그런데 개행??

p="a\newlineb";echo $p  # a\newlineb

문서에서 개행은 무엇을 의미합니까?

답변1

Newline은 개행 문자의 이름입니다. 즉, 일반적으로 \nC에서 다음과 같이 작성되는 문자입니다.

$ p="a\
b"; echo "$p"
ab

결과는 그 이후 ab보다는\a<newline>bPOSIX 표준에 따르면:

인용되지 않은 A는 <backslash>a를 제외하고 다음 문자의 리터럴 값을 유지해야 합니다 <newline>. a가 <newline>뒤에 오면 <backslash>쉘은 이것을 줄 연속으로 해석합니다. 입력을 토큰으로 분할하기 전에 <backslash>및 를 제거해야 합니다. <newline>이스케이프된 문자는 <newline>입력에서 완전히 제거되고 공백으로 대체되지 않으므로 토큰 구분 기호로 사용할 수 없습니다.

하지만 문자열~이다큰따옴표로 인용... 음, 이것은 특별한 경우입니다:

<backslash>특별한 것으로 간주될 때 다음 문자 중 하나가 뒤에 오는 경우에만 이스케이프 문자로서 특별한 의미를 유지합니다. $, `, ", \, <newline>.

따라서 큰따옴표로 묶인 문자열은 백슬래시-개행 문자가 마치 다음과 같이 해석된다는 의미입니다.~ 아니다즉, 줄 연속으로 작동하고 백슬래시와 개행 문자가 모두 제거된다는 의미입니다.

이는 변수를 할당 p할 때가 아니라 변수 에 할당할 때 발생합니다 echo.

또한보십시오bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버린 경우의 보안 영향항상 변수를 인용해야 하는 필요성에 대해 설명합니다.

관련 정보