sh
구문상 유효한 bash 코드가 아닌 코드가 있습니까 (구문을 포기하지 않고)?
몇 가지 명령 sh
으로 재정의하려고 생각 중입니다 .bash
답변1
여기 몇 가지 코드가 있습니다뭔가 다른 일을 해라POSIX sh 및 Bash에서:
hello &> world
이것이 당신에게 "작동하지 않는" 것인지 모르겠습니다.
배쉬에서는표준 출력 및 표준 오류 리디렉션에서 hello
파일을 입력하세요 world
. POSIX에서는 백그라운드에서 실행된 다음 null 리디렉션을 수행하여 sh
이를 자릅니다(즉, 그렇게 처리됩니다 ).hello
world
& >
Bash 확장이 런타임에 작동 bash
하고 순수 POSIX에서 다른 효과를 갖는 다른 경우도 많이 있습니다 sh
. 예를 들어,버팀대 확장Bash의 POSIX 모드에서도 실행되는 또 다른 모드이지만 그렇지 않습니다.
정적 구문 오류 측면에서 Bash에는 [[
및 와 같은 POSIX 지정되지 않은 예약어가 있습니다. 예를 들어 이것은 유효한 POSIX 쉘 코드이지만 Bash 구문 오류 및 다양한 기록이 있습니다.time
[[ x
POSIX 비호환성 오류로 인해 이 질문과 같은 구문 오류가 발생할 수 있습니다.:
x=$(cat <<'EOF'
`
EOF
)
bash: line 2: unexpected EOF while looking for matching ``'
bash: line 5: syntax error: unexpected end of file
단순한 구문 오류는 중요한 상황에서 "잘못된"이라는 매우 위험한 정의이지만 존재합니다.
답변2
간단한 예:
time()(:)
time
Bash에서는 예약어이며 프로그램과 다르게 동작합니다 time
. time
Bash를 사용하여 결과를 구문 분석하려고 하면 일부 실제 스크립트가 손상될 가능성이 높습니다 . 그러나 기술적으로 이는 구문 오류가 아닙니다. time
함수로 재정의하는 경우 는 드물지만 이 질문에 지정된 대로 구문 오류가 발생할 수 있습니다.
더 짧은 예:
a():
에서는 유효 dash
하지만 POSIX와 호환되지 않습니다.