code

"로컬"이 명령의 반환 코드를 스윕하는 이유는 무엇입니까?

codestyles 2020. 12. 31. 08:18
반응형

"로컬"이 명령의 반환 코드를 스윕하는 이유는 무엇입니까?


이 Bash 스 니펫은 예상대로 작동합니다.

$ fun1() { x=$(false); echo "exit code: $?"; }
$ fun1
exit code: 1

그러나를 사용하는 이것은 다음을 local수행하지 않습니다.

$ fun2() { local x=$(false); echo "exit code: $?"; }
$ fun2
exit code: 0

누구든지 local명령의 반환 코드를 스윕 하는 이유를 설명 할 수 있습니까 ?


코드 local가 0 반환 하는 이유는 $?"가장 최근에 실행 된 포 그라운드 파이프 라인의 종료 상태로 확장" 하기 때문 입니다. 따라서 $?성공을 돌려줍니다local

다음 과 같이 x초기화에서의 선언을 분리하여이 동작을 수정할 수 있습니다 x.

$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun
exit code: 1

local명령 의 리턴 코드는 다음 의 리턴 코드를가립니다.false

참조 URL : https://stackoverflow.com/questions/4421257/why-does-local-sweep-the-return-code-of-a-command

반응형