Bash는 $?를 반환하지 않습니다. 변수가 정확함

Bash는 $?를 반환하지 않습니다. 변수가 정확함

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 $?
}

관련 정보