Bash 함수의 `set -e`

Bash 함수의 `set -e`

set -e여기서는 행동이 다릅니다

set -e;

function foo {

}

그리고

function foo {
  set -e;

}

set -e함수 내부에 속합니까? 함수 외부에서 선언하면 set -e셸 파일 내부의 "중첩" 함수에 영향을 미치나요? 그 반대는 어떻습니까? 전화할까 local set -eㅋㅋㅋ

답변1

참고: 여기 설명은 Bash 버전 4.0.35 이상에 적용됩니다. 구현set -e 다양한 쉘/버전 간의 큰 차이. 따르다스티븐의 조언그리고 그것을 사용하지 마십시오 set -e.

man bashShell 내장 명령/ 섹션 set의 내용은 잘 설명되어 있지만 텍스트가 약간 조밀하고 약간의 집중이 필요합니다. 귀하의 특정 질문에 대한 답변은 다음과 같습니다.

  • 뭔가 다른 일을 해보세요 set -e...함께..- "다르다"는 말의 의미에 따라 다르지만, 까다로운 범위 지정 규칙 없이 대답은 "아니요"라고 생각할 것 같습니다. 이는 매우 선형적으로 작동합니다.
  • set -e가 함수 내부에 속합니까?- 전적으로 유효합니다.
  • 함수 외부에서 선언된 set -e가 쉘 파일 내부의 "중첩" 함수에 영향을 줍니까?- 예
  • 그 반대는 어떻습니까?-함수 에서 set -e반환 후 0이 아닌 상태가 발생합니까? 예, 종료됩니다.

답변2

두통을 예방하는 솔루션:

function foo {
  (
       set -e;
  )
}

(그냥 서브쉘을 사용하세요) 때로는 혼란스럽고 예쁘게 만들기 위해 다음과 같이 합니다.

 function foo {(
      set -e;
      # the rest goes here
  )}

관련 정보