어떤 거기에 sh
문법적으로 유효 bash는 코드 (하지 않습니다 발프 구문에 대한)없는 코드는?
나는 덮어 생각하고 sh
함께 bash
특정 명령에 대한.
답변
다음은 몇 가지 코드입니다. POSIX sh와 Bash에서 다른 기능 수행 .
hello &> world
그것이 당신에게 “유효하지 않은지”모르겠습니다.
Bash에서는 표준 출력과 표준 오류 를 모두hello
파일로 리디렉션 합니다 world
. POSIX에서는 백그라운드에서 sh
실행 hello
된 다음에 빈 리디렉션을 만들어 world
잘라 & >
냅니다 (예 :로 취급 ).
Bash 확장 프로그램이 실행될 때 다른 작업을 수행하는 다른 경우가 많이 bash
있으며 순수한 POSIX에서 다른 영향을 미칩니다 sh
. 예를 들어 중괄호 확장 은 또 다른 것이며 Bash의 POSIX 모드에서는 동일하게 작동하지만 그렇지 않습니다.
정적 구문 오류가 발생하는 한 Bash에는 POSIX에서 지정하지 않은 예약어 (예 : [[
및 time
)가 있습니다. 예를 들어 [[ x
유효한 POSIX 셸 코드이지만 Bash 구문 오류이며 구문 오류 가 발생할 수있는 다양한 POSIX 비 호환 버그 의 이력 , 이 질문에서와 같은 :
x=$(cat <<'EOF'
`
EOF
)
bash: line 2: unexpected EOF while looking for matching ``'
bash: line 5: syntax error: unexpected end of file
구문 오류 전용은 중요한 상황에 대해 “유효하지 않은”에 대한 매우 위험한 정의이지만 거기에 있습니다.
답변
간단한 예 :
time()(:)
time
Bash는 예약어이며 time
프로그램 과 다르게 동작 합니다. time
bash를 사용하여 결과를 구문 분석하려고하는 실제 스크립트를 깨뜨릴 가능성이 큽니다 . 그러나 기술적으로는 구문 오류가 아닙니다. time
함수로 재정의 하는 경우는 드물지만이 질문에 지정된대로 구문 오류가 발생합니다.
더 짧은 예 :
a():
에서 유효 dash
하지만 POSIX 호환은 아닙니다.