Digamos que eu tenha duas funções foo
e bar
:
foo() {
FOO=foo
}
Eu posso fazer isso:
bar() {
echo $FOO
}
$ bar
$ foo
Mas também posso fazer:
bar() {
echo $1
}
$ bar $FOO
$ foo
E
foo() {
local foo=foo
return $foo
}
bar() {
echo $1
}
$ bar foo
$ foo
Como determino o escopo de uma variável, é global quando pode ser usada em diferentes funções, nos mesmos scripts ou/e em scripts diferentes?
Existe uma maneira correta ou uma convenção sobre como gerenciar funções com variáveis no bash?
Variável ambiental
Essas variáveis estarão visíveis para todos os scripts executados nesse ambiente
Você pode vê-los executando o
env
comando.Estes são definidos usando o
export
built-in oudeclare -x
Variável global
Uma variável global será visível para tudo dentro de um único programa (script), incluindo processos filhos criados por subshells/funções, mas não entre programas (scripts).
Qualquer variável não especificamente exportada ou declarada como local será uma variável global.
Variável local
Essas variáveis só serão visíveis para a função em que são declaradas e para quaisquer funções filhas.
Essas variáveis devem ser declaradas especificamente como locais usando o
local
builtin ou simplesmente usandodeclare
dentro da função.