Use local
. Observe que o bash tem o escopo de função somente (como var
em JavaScript), não bloqueia o escopo.
myfunc() {
local foo bar=$1 baz=$2
foo=/tmp/$bar
echo "value inside: $foo, $bar"
}
foo=123 bar=234
myfunc quux
echo "value outside: $foo, $bar"
Se você tem um bloco que não precisa de nenhuma persistência, você pode chamar um subshell usando ( ... )
:
foo=123
( foo=345; echo "value inside: $foo" )
echo "value outside: $foo"
Observe que os subshells têm a sobrecarga total de fork () - eles são processos independentes. Além disso, eles não permitem que você escolha quais variáveis localizar - é tudo ou nada.