Para variáveis, é possível usar uma função anônima (como observado no comentário acima). Isso significa que você pode definir quantas variáveis desejar. Os que você deseja ocultar do chamador que você prefixar com local
, aqueles que você deseja comunicar ao chamador que você acabou de definir normalmente:
function {
local my_var=foo
your_var=bar
: ...
}
Mas para funções que não funcionam, elas não podem ser declaradas local
. Eu tive esse problema no meu zshrc e decidi prefixar todos os nomes de minhas funções "locais" com uma string curta (como você faz namespaces em C) e para fazer um curinga unfunction
no final:
function foo-do-something () {
: ...
}
function foo-do-some-more-stuff () {
: ...
}
function foo-main () {
local my_var=oof
you_var=rab
foo-do-something for bar
foo-do-some-more-stuff with baz
}
foo-main
unfunction -m 'foo-*'
Esta não é uma solução ideal na minha opinião (prefiro funções locais), mas funciona para mim.