배쉬 5.2.15가 출시되었습니다.
다음 스크립트를 실행하면 에코가 실행되지 않을 것으로 예상됩니다.
#!/bin/bash
set -e
function func() {
(
exit 1
)
echo 'should not be run because of set -e'
}
func || true
실제로 작동하는데 이는 나에게 버그처럼 보입니다.
|| true
함수가 호출되는 사이트에서 제거하면 (올바르게) 실행되지 않습니다.
내 설명은 "오류 삼키기"가 || true
코드의 잘못된 부분에 적용된다는 것입니다. 마치 서브쉘의 닫는 괄호(저는 그렇지 않습니다)와 같은 줄에 쓴 것과 같습니다.
내가 뭐 놓친 거 없니?
답변1
이것은녹음된[강조하다내 거]:
-e
파이프라인(파이프라인 참조)(단일 단순 명령(단순 명령 참조)으로 구성될 수 있음), 목록(명령 목록 참조) 또는 복합 명령(복합 명령 참조)이 0이 아닌 상태를 반환하는 경우 즉시 종료하십시오.&&
실패한 명령이 목록에서 실행된 명령의 [...] 부분인 경우 쉘은 종료되지 않습니다(||
마지막 또는 다음 명령 제외).&&
||
[…]. 서브쉘 외부의 복합 명령이 무시될 때 명령이 실패했기 때문에 0이 아닌 상태를 반환하는 경우-e
쉘은 종료되지 않습니다. […]
[…]
복합 명령 또는 셸 함수가 무시된 컨텍스트에서 실행되는 경우
-e
복합 명령 또는 함수의 본문 내에서 실행되는 모든 명령은 이 설정이 설정되고 명령이 실패 상태를 반환-e
하더라도 이 설정의 영향을 받지 않습니다.-e
[…]
이것은 func || true
-e
당신이 무시 ||
당하고함수 전체에서 무시됩니다.