-e 옵션이 포함된 Unix echo 명령

-e 옵션이 포함된 Unix echo 명령

UNIX의 명령 에 대해 읽으 echo면서 백슬래시 이스케이프 해석을 활성화하는 옵션을 찾았습니다 -e. 문제는 이러한 백슬래시 이스케이프 시퀀스 중 하나가 \\ 이지만 다음 두 명령을 사용할 때 문제는 다음과 같습니다.

echo "hello\\\world"

그리고

echo -e "hello\\\world"

동일한 결과가 출력됩니다: hello\\world , 차이점은 무엇입니까? |

답변1

기본값은 확장된 이스케이프 시퀀스이고, -e 옵션은 비표준입니다.

echo 출력에 -e가 포함되지 않은 경우 echo 구현은 비규격입니다.

여기서 문제는 일부 구현이 최소 POSIX 요구 사항만 따르고, UNIX호환이라고 할 수 있는 플랫폼이 XSIPOSIX 개선 사항에 대한 지원을 구현해야 한다는 사실을 무시한다는 것입니다.

참고: MacOS X 및 Solaris의 bash는 항상 이스케이프 시퀀스를 확장하도록 컴파일됩니다. 기본 컴파일 변형의 Bash는 POSIX XSI와 호환되지 않습니다.

POSIX 호환 셸(예: ksh93, bosh 또는 dash)은 기본적으로 필요에 따라 이스케이프 시퀀스를 확장합니다.

동작을 확인하려면 문자열을 테스트하는 것은 좋은 생각이 아닙니다. 더 나은 테스트는 다음과 같습니다.

echo '\tfoo'

그리고 foo출력이 탭 문자로 시작하는지 확인하십시오.

아마도 문제가 있는 이유는 쉘을 사용하고 있고 foo\\bar쉘이 이미 큰따옴표로 묶인 문자열의 백슬래시를 처리하기 때문입니다. 동작을 확인하려면 echo작은따옴표로 묶인 문자열을 매개변수로 사용해야 합니다.

관련 정보