내장 반환

내장 반환

~에 따르면그룹 열기,

return 유틸리티는 쉘이 현재 함수 또는 도트 스크립트 실행을 중지하도록 해야 합니다. 쉘이 현재 함수나 도트 스크립트를 실행하고 있지 않으면 결과는 지정되지 않습니다.

그러나 다음 코드 조각을 실행하면

func () {
    ( return 1 )
    return 0
}
func
echo $?

출력은 다음과 같습니다 0(bash와 dash를 시도했지만 결과는 동일함). 따라서 이로 return인해 셸이 현재 함수 실행을 중지하는 것으로 보이지 않으며 이는 POSIX 표준에 위배됩니다. 내가 뭐 놓친 거 없니?

답변1

( return 1 )

서브쉘에서 실행됩니다. 이는 쉘의 반환 코드를 캡처한 후 하위 쉘을 즉시 종료합니다 1. 0그 후 함수 자체가 해당 행을 반환합니다.

(바라보다그룹화 명령쉘 명령 언어 사양. )

{}하위 쉘을 도입하지 않고 양식 과 비교하십시오.

#! /bin/sh

func () {
    ( return 42 )
    echo "One:   $?"
    { return 1; }
    echo "Two:   $?"
    return 2
}

func
echo "Three: $?"

출력("2개"가 없음):

One:   42
Three: 1

관련 정보