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