Bash: 중괄호에서 복귀

Bash: 중괄호에서 복귀
user@sv7280:~$ return
bash: return: can only `return' from a function or sourced script
user@sv7280:~$ { return }
> 

무슨 일이 일어나고 있나요? >여기서 프롬프트는 무엇을 의미하며 { return }어디로 이동하나요?

답변1

>$PS2명령이 아직 완료되지 않았으며 완료하려면 추가 입력이 필요함을 알려주는 셸의 프롬프트 입니다 .

Bash에서 다음을 수행하면:

echo }

출력되는 것을 볼 수 있습니다 }.

{명령 그룹을 시작하는 키워드입니다.

{ echo }

{위의 키워드 다음에는 쉘 이 실행을 시작하기 전에 echo }end 키워드를 기다리고 있습니다 .}

이 키워드는 개행 문자(또는 ... 와 같은 문자 ) }로 이전 명령과 구분되어야 합니다 .;&{(echo)}

내장 echo또는return통사론관점에서 보면 아무런 차이가 없습니다. 따라서 다음이 필요합니다.

{ return; }

그러나 이는 return함수 내부에서 호출되지 않으므로 여전히 오류가 발생합니다.

Bourne과 같은 쉘에서 함수를 정의하려면 여전히 funcname()명령 앞에 와야 합니다. 의 경우 bash명령은 (subshell), { command group; }, for ...; do ...; done... 와 같은 복합 명령만 가능합니다.

따라서 다음이 필요합니다.

myfunc() { return; echo not reached; }; myfunc

또는:

myfunc() for i in 1 2; do echo "$i"; return; done; myfunc

함수 외에도 return소스 스크립트에서 함수를 호출하는 것도 가능하므로 함수를 정의하지 않고 일련의 명령에서 반환할 수 있도록 하려면 다음을 수행하면 됩니다.

source /dev/fd/3 3<< 'EOF'
  echo foo
  return 123
  echo not reached
EOF

또는 exit대신 서브쉘을 사용할 수도 있습니다 return.

(
  echo foo
  exit 123
  echo not reached
)

(물론 이 명령은 서브쉘 환경에서 실행됩니다)

에서는 zsh익명 함수를 사용할 수도 있습니다.

() {
  echo foo
  return 123
  echo not reached
}

관련 정보