No meu projeto, tenho o seguinte snippet:
local output="$(bash "${1##*/}")"
echo "$?"
Isso sempre imprime zero devido a local
, no entanto, remover local
faz com que a $?
variável se comporte corretamente: assumir o código de saída do subshell.
Minha pergunta é: como posso manter essa variável local enquanto captura o valor de saída?
bash
variable
exit-status
Ultimate Hawk
fonte
fonte
shellcheck
não apenas detectará esse problema, mas sugerirá a solução em unix.stackexchange.com/a/281749/24718 !Respostas:
Isso ecoará
127
, o código de erro correto para "comando não encontrado".Você pode usar
local
para definir mais de uma variável. Então, apenas criei a variável localRET
para capturar o código de saída do subshell antes de terlocal
sucesso e definir$?
como zero.fonte
bash
avalie esta expressão da esquerda para a direita?bash
manual de referência do POSIX nem no manual.Declare a variável local antes de atribuir a ela:
Na minha opinião, isso também é mais legível do que definir uma
RET
variável adicional . YMMV nisso, mas funciona exatamente como você esperaria.fonte
local var1 var2 ...
e Bob é seu tio.