/ / Jak utworzyć lokalną zmienną tylko do odczytu w bashu? - bash, zmienne, lokalne, tylko do odczytu

Jak utworzyć lokalną zmienną tylko do odczytu w bash? - bash, zmienne, lokalne, tylko do odczytu

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 1

Nawet 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