В моем проекте у меня есть следующий фрагмент:
local output="$(bash "${1##*/}")"
echo "$?"
Это всегда печатает ноль из-за local
, однако, удаление local
заставляет $?
переменную вести себя правильно: что предполагает код выхода из подоболочки.
Мой вопрос: как я могу сохранить эту переменную локально, в то же время захватывая выходное значение?
bash
variable
exit-status
Ultimate Hawk
источник
источник
shellcheck
не только поймает эту проблему, но и предложит решение на unix.stackexchange.com/a/281749/24718 !Ответы:
Это отобразит
127
правильный код ошибки «команда не найдена».Вы можете использовать
local
для определения более одной переменной. Так что я просто создаю локальную переменнуюRET
для захвата кода завершения подоболочки, прежде чем она завершитсяlocal
успешно и$?
обнулится.источник
bash
вычисляет это выражение слева направо?bash
справочном руководстве.Объявите локальную переменную перед ее назначением:
На мой взгляд, это также более читабельно, чем установка дополнительной
RET
переменной. YMMV на этом, но это работает так, как вы ожидаете.источник
local var1 var2 ...
и Боб - ваш дядя.