내 프로젝트에는 다음과 같은 스니펫이 있습니다.
local output="$(bash "${1##*/}")"
echo "$?"
그러나 이는 항상 0 을 인쇄하므로 local
삭제하면 변수가 올바르게 작동 local
하게 됩니다 . 이는 서브셸의 종료 코드를 가정하는 것입니다.$?
내 질문은: 종료 값을 캡처하는 동안 이 변수를 로컬 변수로 어떻게 유지할 수 있습니까?
답변1
할당하기 전에 지역 변수를 선언하세요.
thing() {
local output
output="$(bash "${1##*/}")"
echo "$?"
}
제 생각에는 추가 변수를 설정하는 것보다 이것이 RET
더 읽기 쉽습니다 . 이것에 대해서는 YMMV이지만 예상대로 작동합니다.
답변2
#!/bin/bash
thing() {
local foo=$(asjkdh) ret="$?"
echo "$ret"
}
127
그러면 "명령을 찾을 수 없음"에 대한 올바른 오류 코드가 표시됩니다 .
이를 사용하여 local
여러 변수를 정의할 수 있습니다. 따라서 RET
성공하기 전에 서브셸의 종료 코드를 캡처하고 이를 0으로 설정하기 위해 로컬 변수도 만들었습니다 .local
$?