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本身就是一個命令(它是 shell 內建命令),因此您將獲得 的返回值local,而不是命令替換中管道的返回值。您可以考慮在賦值之前將變數宣告為 local,這將避免local在與命令替換相同的管道中呼叫內建變量,這將避免模糊命令的退出程式碼:

foo() {
    local bar
    bar=$(baz)
    echo $?
}

相關內容