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

관련 정보