¿Bash no devuelve $? variable correctamente

¿Bash no devuelve $? variable correctamente

¿Bash no devuelve $? variable correctamente cuando la salida del comando se asigna a una variable local:

test() {
  aaa=$(eval "timeout 1s sleep 5s")
  echo $? # echoes 124 (!=0 as expected)

  local aaa=$(eval "timeout 1s sleep 5s")
  echo $? # echoes 0
}

¿Por qué?

Respuesta1

locales un comando en sí mismo (es un shell incorporado), por lo que obtiene el valor de retorno de local, no el valor de retorno de la canalización en la sustitución del comando. Podrías considerar declarar la variable local antes de la asignación, lo que evitará tener que llamar al localincorporado durante el mismo proceso que la sustitución del comando, lo que evitará oscurecer el código de salida de tu comando:

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

información relacionada