Ответ 1
Если вы посмотрите на man файл для local
(который на самом деле представляет собой только страницу BASH builtins man), он рассматривается как его собственная команда, которая дает код выхода 0
при успешном создании локального переменная. Таким образом, local
перезаписывает последний выполненный код ошибки.
Попробуйте следующее:
function testing { local test; test="$(return 1)"; echo $?; }; testing
EDIT: Я пошел вперед и попробовал это для вас, и он работает.