2012-03-01 2 views
24

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

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

ответ

31

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

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

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

EDIT: Я пошел вперед и попытался это для вас, и это работает.

+0

Спасибо, как всегда, сразу после того, как я разместил свой вопрос, я нашел ответ сам, который выходит так же, как вы предлагаете. У меня просто меньше репутации, чтобы отвечать на мои вопросы до 8 часов. Но 'man local' дает мне man-страницу' LOCAL (8postfix) 'manpage, поэтому не слишком полезен. Но я нашел его на http://mywiki.wooledge.org/BashPitfalls#local_varname.3D.24.28command.29 – Vampire

+0

Другим источником информации будет 'man bash'. «local» упоминается в разделе «SHELL BUILTIN COMMANDS». –

+0

Команда 'help' возвращает документацию по встроенным командам. См. 'Help local'. – Eliot