Код выхода подстановки команды в назначении локальной переменной bash

Как я могу проверить код выхода подстановки команды в bash, если присвоение выполняется локальной переменной в функции?
См. Следующие примеры. Во втором я хочу проверить код выхода.
Есть ли у кого-нибудь хороший способ обхода или правильное решение для этого?

$ function testing { test="$(return 1)"; echo $?; }; testing
1
$ function testing { local test="$(return 1)"; echo $?; }; testing
0

person Vampire    schedule 01.03.2012    source источник


Ответы (1)


Если вы посмотрите на man-файл для local (который на самом деле является просто страницей руководства по встроенным функциям BASH), он будет рассматриваться как отдельная команда, которая дает код выхода 0 после успешного создания локальной переменной. Итак, local перезаписывает последний выполненный код ошибки.

Попробуй это:

function testing { local test; test="$(return 1)"; echo $?; }; testing

РЕДАКТИРОВАТЬ: Я попробовал это для вас, и он работает.

person Chriszuma    schedule 01.03.2012
comment
Спасибо, как всегда, сразу после того, как я разместил свой вопрос, я сам нашел ответ, который соответствует тому, что вы предлагаете. Просто у меня слишком низкая репутация, чтобы отвечать на свои вопросы до того, как пройдут 8 часов. Но man local дает мне справочную страницу LOCAL(8postfix) man-страницы, так что она не слишком полезна. Но я нашел его на mywiki.wooledge.org/ - person Vampire; 02.03.2012
comment
Другой источник информации - man bash. local упоминается в разделе ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ. - person Victor Zamanian; 18.02.2013
comment
Команда help возвращает документацию по встроенным командам. См. help local. - person Eliot; 02.08.2017