Подтвердить что ты не робот

Почему "локальный" считывает код возврата команды?

Этот Bash фрагмент работает так, как я ожидал:

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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