Bash가 $를 반환하지 않습니까? 명령 출력이 지역 변수에 할당되면 변수가 올바르게 지정됩니다.
test() {
aaa=$(eval "timeout 1s sleep 5s")
echo $? # echoes 124 (!=0 as expected)
local aaa=$(eval "timeout 1s sleep 5s")
echo $? # echoes 0
}
왜?
답변1
local
은 그 자체로 명령이므로(셸 내장) local
명령 대체에서 파이프라인의 반환 값이 아닌 의 반환 값을 얻습니다. 할당하기 전에 로컬 변수를 선언하는 것을 고려할 수 있습니다. 이렇게 하면 local
명령 대체와 동일한 파이프라인 중에 내장을 호출할 필요가 없어 명령의 종료 코드가 모호해지는 것을 방지할 수 있습니다.
foo() {
local bar
bar=$(baz)
echo $?
}