POSIX

POSIX

POSIX 표준에 관한 흥미로운 동영상을 YouTube에서 보았습니다.

결과를 아시는 분 계시냐고 묻는 강의의 일부입니다.

echo \\\\\\

Bash 및 sh(POSIX 표준?)

sh-3.2$ echo \\\\\\

\\

bash$ echo \\\\\\

\\\

그 영상을 다시 찾고 싶었는데 못 찾았어요.

어떻게 이런 일이 일어났는지 이해가 안 돼요.

답변1

조금 복잡해집니다. 실제로는 있습니다다양한 시나리오: 두 가지 POSIX 변형과 Bash의 기능.

첫째, 쉘은 사용자가 작성한 내용을 처리합니다. POSIX 쉘 언어 및 Bash,백슬래시 인용 지원, 어느

후속 문자의 리터럴 값을 유지합니다.

따라서 주어진 명령의 매개변수 중 하나를 나타냅니다 \\.\

귀하의 예에는 echo \\\\\\세 쌍의 백슬래시가 포함되어 있습니다. 쉘은 이러한 이스케이프를 해석하고 세 개의 백슬래시를 인수로 제공합니다 \\\.echoecho '\\\'

모든 경우에 echo명령은 동일한 인수를 갖지만 다르게 해석합니다.


POSIX

선택적 POSIX 확장(XSI 또는 X/개방형 시스템 인터페이스)는 이제 광범위한 지원을 받고 있습니다. XSI 지원 없이 POSIX와 호환될 수 있는데, 이 경우에는 차이가 있습니다.

XSI와 함께,echo매개변수 내에서 해석하려면 백슬래시 이스케이프가 필요합니다., 포함하다

\\
    Write a <backslash> character.

XSI 없이, POSIX는 대신 다음과 같이 말합니다.

첫 번째 피연산자가 -n이거나 피연산자에 <backslash> 문자가 포함된 경우 결과는 구현에 따라 정의됩니다.

따라서 특정 결과가 지정되지 않습니다(또는 표시되는 두 버전이 모두 허용됨).

POSIX/XSI는 echo첫 번째 백슬래시 쌍을 이스케이프 자체로 해석하여 \\출력을 생성합니다.


불다

배쉬 내장echo반면에 이스케이프 시퀀스는 -e명시적으로 필요한 옵션을 제공하지 않는 한 해석되지 않습니다.

존재하다Bash의 POSIX 모드, 다양한 상황에서 활성화됩니다 sh(아직도 똑같은 일을 하고 있어(이것은 "구현에 따라 정의된" 동작이 허용됩니다). xpg_echo이 옵션 활성화를 사용 하거나 shopt -s xpg_echo실행 bash파일이 구성 옵션으로 빌드되면 --enable-xpg-echo-defaultPOSIX/XSI 동작이 발생합니다.

GNU coreutils도 echo같은 일을 합니다.


이는 다음을 의미합니다.

  1. Bash에서는 쉘 수준 해석만 발생하고 세 개의 백슬래시가 출력됩니다.
  2. POSIX/XSI 환경에서는 백슬래시가 해석됩니다.두 배, 두 개의 백슬래시가 출력됩니다.
  3. 순수 POSIX 환경에서는 구현이 동작을 선택할 수 있습니다. 표시되는 출력 버전은 모두 허용됩니다.
  4. 를 사용하여 이스케이프 문자를 자동으로 해석하는 XSI 동작을 갖도록 Bash를 구성할 수 있지만 shopt -s xpg_echo명시적인 요청 없이는 활성화되지 않습니다.

관련 정보