Почему «местный» считывает код возврата команды?

Этот fragment Bash работает так, как я ожидал:

$ fun1() { x=$(false); echo "exit code: $?"; } $ fun1 exit code: 1 

Но этот, используя local , не делает:

 $ fun2() { local x=$(false); echo "exit code: $?"; } $ fun2 exit code: 0 

Может ли кто-нибудь объяснить, почему local развертка возвращает код команды?

    2 Solutions collect form web for “Почему «местный» считывает код возврата команды?”

    Причина, по которой код с local возвращает 0, состоит в том, что $? «Расширяется до статуса выхода последнего выполненного переднего плана». Таким образом, $? возвращает успех local

    Вы можете исправить это поведение, разделив объявление x от инициализации x следующим образом:

     $ fun() { local x; x=$(false); echo "exit code: $?"; }; fun exit code: 1 

    Код возврата local команды затушевывает код возврата false

    Давайте будем гением компьютера.