Jak utworzyć oba local
i declare -r
(tylko do odczytu) zmienna w bashu?
Jeśli zrobię:
function x {
declare -r var=val
}
Wtedy po prostu dostaję globalny var
to jest tylko do odczytu
Jeśli zrobię:
function x {
local var=val
}
Jeśli zrobię:
function x {
local var=val
declare -r var
}
Potem znów dostaję globalny (mogę uzyskać dostęp var
z innych funkcji).
Jak połączyć bash lokalnie i tylko do odczytu?
Odpowiedzi:
16 dla odpowiedzi nr 1Nawet jeśli help local
nie wspomina o tym w Bash 3.x, local
może zaakceptować te same opcje co declare
(co najmniej Bash 4.3.30, nadzór nad tą dokumentacją został poprawiony).
W ten sposób możesz po prostu:
local -r var=val
To mówi, declare
wewnątrz funkcji domyślnie zachowuje się tak samo jak local
, jako ruakh stwierdza w komentarzu, więc twoja pierwsza próba powinna również powiodła się w stworzeniu lokalny zmienna tylko do odczytu.
W wersji Bash 4.2 i wyższej możesz nadpisanie to z declare
"s -g
opcja tworzenia zmiennej globalnej nawet z poziomu funkcji (robi to Bash 3.x) nie wesprzyj to.)
0 dla odpowiedzi nr 2
Jeśli chcesz kod wyjścia, możesz użyć tego podejścia
function f {
local t=$(ls asdf 2>&1) c=$?; local -r t=$t;
echo "Exit code: "$c;
echo "Value: "$t;
}
f
Wydruki:
Exit code: 1
Value: ls: asdf: No such file or directory