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
}