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

相关内容