Почему «локальный» сканирует код возврата команды? - PullRequest
53 голосов
/ 12 декабря 2010

Этот фрагмент 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 ]

62 голосов
/ 12 декабря 2010

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

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

$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun
exit code: 1
4 голосов
/ 12 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...