내 프로젝트에는 다음과 같은 스 니펫이 있습니다.
local output="$(bash "${1##*/}")"
echo "$?"
이로 인해 항상 0으로 인쇄 local
되지만 변수를 제거 local
하면 $?
변수가 올바르게 작동합니다. 서브 쉘에서 종료 코드를 가정합니다.
내 질문은 :이 변수를 로컬로 유지하면서 종료 값을 캡처하는 방법은 무엇입니까?
답변
#!/bin/bash
thing() {
local foo=$(asjkdh) ret="$?"
echo "$ret"
}
127
“명령을 찾을 수 없음”에 대한 올바른 오류 코드 인가 에코됩니다 .
local
둘 이상의 변수를 정의 하는 데 사용할 수 있습니다 . 따라서 로컬 변수 RET
를 작성 하여 하위 쉘의 종료 코드를 캡처하여 local
성공하고 $?
0으로 설정 합니다.
답변
지역 변수를 지정하기 전에 선언하십시오 :
thing() {
local output
output="$(bash "${1##*/}")"
echo "$?"
}
내 의견으로는 이것은 추가 RET
변수를 설정하는 것보다 더 읽기 쉽습니다. YMMV는 있지만 예상대로 작동합니다.