주류 POSIX 호환 셸에서 큰따옴표 안의 특수 문자를 이스케이프하는 동작이 POSIX와 일치하지 않습니까?

주류 POSIX 호환 셸에서 큰따옴표 안의 특수 문자를 이스케이프하는 동작이 POSIX와 일치하지 않습니까?

~에 따르면POSIX 셸 명령 언어 페이지:

\

<backslash>이스케이프 문자로서의 특별한 의미는 뒤에 다음 문자 중 하나가 오는 경우에만 유지되어야 합니다(이스케이프 문자(백슬래시) 참조).특별하다고 생각될 때:

$ ` " \ <newline>

나는 이것을 5개의 특수 문자 중 하나만 이스케이프해야 한다는 의미로 해석합니다 \(주어진 컨텍스트에서 특수 문자인 경우).

ash, dash, bash 및 ksh의 매뉴얼 페이지에는 "특별하다고 간주되는 경우" 절이 포함되어 있지 않습니다. 나는 이것이 \5개의 문자 중 하나가 주어진 맥락에서 특별하지 않더라도 이 5개의 문자를 무조건 이스케이프하는 효과를 갖는다는 의미(그리고 기본 실험에 의해 확인된)라고 생각합니다 .

고려된 출력 $ printf '%s\n' "\abcde", \abcde즉 이는 a이 경우(또는 해당 문제에 대한 모든 경우) 특별하지 않기 때문에 예상되는 것이므로 \특별하지 않고 문자 그대로 처리됩니다.

이제 출력을 고려 $ printf '%s\n' "\\abcde"하십시오 \abcde. 이것은 내가 기대하는 동작이 아닙니다. 제가 보기에는 문자열의 첫 번째 백슬래시 \\abcde도 문자 그대로 처리되어야 하는 것 같습니다 . 그 뒤에 오는 \문맥상 \특별하지 않기 때문입니다. 내가 원하는 출력은 \\abcde.

예상치 못한 동작이 나타나는 또 다른 시나리오는 의 출력입니다 $ printf '%s\n' "ab\$". 즉, ab$제 생각에는 $이 경우 매개변수 확장, 명령 대체 또는 산술 확장을 도입하는 데 도움이 되므로 특별한 의미가 있습니다. 그러므로 내 생각에는 그것이 뒤따르는 문맥이 특별하지 않기 \때문에 문자 그대로 받아들여야 한다고 생각한다 . 내가 원하는 출력은 .$$ab\$

기록을 위해, 나는 여기서 완전히 벗어났기를 바랍니다. 이로 인해 특정 상황에서만 이 다섯 글자를 탈출할 수 있을지 걱정해야 했기 때문에 내 삶이 훨씬 더 어려워졌습니다. 나는 가능한 한 정확하려고 노력하고 있으며 \주류 POSIX 호환 셸에서 이 (개인적으로 원하는) 동작이 POSIX와 호환되지 않는 경우 이 5개의 특수 문자를 이스케이프 처리하는 데 무조건 의존하고 싶지 않습니다.

답변1

이 메모텍스트 삭제 제안특별하다고 생각될 때.

참고: 제안된 수정 사항 집합은 0000998에 제공됩니다..

또한 이 메모에는 변경 사항이 2012년 8월 30일에 승인되었다고 보고되어 있습니다.

왜 아직도 그런 지 알 수 없어요현재 표현에 사용됨.

이 문장은 잊어버리셔도 될 것 같아요.

답변2

echo "\abc\$\\"(예를 들어)에는 두 단계가 포함됩니다.

첫째, 문자열 매개변수가 echo큰따옴표로 묶여 있기 때문에 쉘은 그 안의 이스케이프 문자를 처리합니다.

이 경우 에 전달하기 전에 "\abc\$\\"로 변환됩니다 . "특수" 문자가 아니기 때문에 유언장은 변경되지 않습니다. 다른 이스케이프 문자는 다음과 같습니다.\abc$\echo\aa단어, 이는 더 이상 셸에서 특별한 의미가 없음을 의미합니다( $확장은 시작되지 않으며 백슬래시는 다음 문자를 이스케이프하지 않습니다 등). $큰따옴표로 묶인 문자열 끝에 있는 an은 여전히 ​​"특별"입니다. 그것 때문에할 수 있다확장이 도입되었지만 문자열이 바로 뒤에 끝나지 않습니다. 첫 번째 문자열의 문자열은 어떤 용도로도 사용되어서는 안 되기 때문에 두 문자열 "a$"및 는 "a\$"동일합니다 .$

그런 다음 echo해당 문자열 매개변수를 직접 해석할 수 있습니다. 예를 들어, 의 일부 구현은 echo"벨 문자"를 나타내는 것으로 간주됩니다.\a

나는 또한 당신이 여기의 기준을 잘못 읽고 있다고 생각합니다. 백슬래시 뒤에 특수 문자 중 하나가 오는 것이 평가됩니다.제거하다백슬래시. 당신은 그것이 동일하게 유지되어야 하고 \$그대로 유지되어야 한다고 생각하는 것 같습니다 \$. 이 표준은 다음과 같이 규정합니다.반대의.

관련 정보