
bash를 쉘로 구성한 것 같은데 왜 이런 일이 발생하는 걸까요?
내 쉘은 bash입니다.
# ls -al `which sh`
lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash
sh를 사용하여 스크립트를 실행할 때 오류가 발생했습니다.
# sh ubuntu/util.sh
ubuntu/util.sh: line 32: `test-build-release': not a valid identifier
배쉬 오류 없음
# bash ubuntu/util.sh
답변1
예상한 bash 실행 파일을 실행하고 있지만 쉘은 단순한 bash가 아니라 sh
POSIX 호환 모드에서 실행되는 bash입니다. 이를 호출한 명령의 이름을 확인하여 이를 수행하고, 그렇다면 sh
자동으로 POSIX 모드를 활성화합니다. 이 작업은 매우 제대로 수행되지 않으며 POSIX 호환 스크립트를 테스트하는 데 전적으로 의존해서는 안 되지만 sh
허용되는 구문을 크게 제한해야 합니다.
--posix
POSIX 표준과 다르게 작동하는 bash의 기본 동작을 표준(posix 모드)에 맞게 변경합니다. posix 모드가 bash의 동작에 어떻게 영향을 미치는지 자세히 설명하는 아래 문서 참조를 참조하세요.
그리고로부터http://tiswww.case.edu/php/chet/bash/POSIX:
--posix
명령줄 옵션으로 Bash를 시작하거나set -o posix
Bash가 실행되는 동안 실행하면 Bash 기본값이 다른 영역에서 POSIX가 지정한 것과 일치하도록 동작을 변경하여 Bash가 POSIX 표준에 더 가깝게 이동하게 됩니다.호출되면
sh
Bash는 시작 파일을 읽은 후 POSIX 모드로 들어갑니다.