UNIX의 명령 에 대해 읽으 echo
면서 백슬래시 이스케이프 해석을 활성화하는 옵션을 찾았습니다 -e
. 문제는 이러한 백슬래시 이스케이프 시퀀스 중 하나가 \\ 이지만 다음 두 명령을 사용할 때 문제는 다음과 같습니다.
echo "hello\\\world"
그리고
echo -e "hello\\\world"
동일한 결과가 출력됩니다: hello\\world , 차이점은 무엇입니까? |
답변1
기본값은 확장된 이스케이프 시퀀스이고, -e 옵션은 비표준입니다.
echo 출력에 -e가 포함되지 않은 경우 echo 구현은 비규격입니다.
여기서 문제는 일부 구현이 최소 POSIX 요구 사항만 따르고, UNIX
호환이라고 할 수 있는 플랫폼이 XSI
POSIX 개선 사항에 대한 지원을 구현해야 한다는 사실을 무시한다는 것입니다.
참고: MacOS X 및 Solaris의 bash는 항상 이스케이프 시퀀스를 확장하도록 컴파일됩니다. 기본 컴파일 변형의 Bash는 POSIX XSI와 호환되지 않습니다.
POSIX 호환 셸(예: ksh93, bosh 또는 dash)은 기본적으로 필요에 따라 이스케이프 시퀀스를 확장합니다.
동작을 확인하려면 문자열을 테스트하는 것은 좋은 생각이 아닙니다. 더 나은 테스트는 다음과 같습니다.
echo '\tfoo'
그리고 foo
출력이 탭 문자로 시작하는지 확인하십시오.
아마도 문제가 있는 이유는 쉘을 사용하고 있고 foo\\bar
쉘이 이미 큰따옴표로 묶인 문자열의 백슬래시를 처리하기 때문입니다. 동작을 확인하려면 echo
작은따옴표로 묶인 문자열을 매개변수로 사용해야 합니다.