W moim projekcie mam następujący fragment kodu:
local output="$(bash "${1##*/}")"
echo "$?"
To zawsze wypisuje zero local
, ponieważ usunięcie local
powoduje jednak, że $?
zmienna zachowuje się poprawnie: co oznacza przyjęcie kodu wyjścia z podpowłoki.
Moje pytanie brzmi: jak mogę zachować tę zmienną lokalnie, jednocześnie rejestrując wartość wyjściową?
bash
variable
exit-status
Ultimate Hawk
źródło
źródło
shellcheck
nie tylko złapie ten problem, ale zaproponuje rozwiązanie na unix.stackexchange.com/a/281749/24718 !Odpowiedzi:
Spowoduje to wyświetlenie echa
127
, poprawnego kodu błędu dla „polecenia nie znaleziono”.Możesz użyć
local
do zdefiniowania więcej niż jednej zmiennej. Więc po prostu tworzę również zmienną lokalną,RET
aby przechwycić kod wyjściowy podpowłoki, zanim sięlocal
powiedzie i ustawi się$?
na zero.źródło
bash
ocenia to wyrażenie od lewej do prawej?bash
podręczniku użytkownika.Zadeklaruj zmienną lokalną przed przypisaniem jej:
Moim zdaniem jest to również bardziej czytelne niż ustawienie dodatkowej
RET
zmiennej. YMMV, ale działa tak, jak można się spodziewać.źródło
local var1 var2 ...
i Bob jest twoim wujem.