O Bash parece diferenciar entre variáveis que foram exportadas e aquelas que não foram.
exemplo:
$ FOO=BAR
$ env | grep FOO
$ set | grep FOO
FOO=BAR
set
vê a variável, mas env
não.
$ export BAR=FOO
$ env | grep FOO
BAR=FOO
$ set | grep FOO
BAR=FOO
FOO=BAR
set
vê as duas variáveis, mas env
vê apenas a variável exportada.
Eu sei que set
é um bash embutido e env
não é.
Quais são as diferenças entre as variáveis exportadas e as que não são?
shell
environment-variables
lesmana
fonte
fonte
Respostas:
As variáveis exportadas são transportadas para o ambiente de comandos executados pelo shell que os exportou, enquanto as variáveis não exportadas são locais para a chamada de shell atual. Na
export
página do manual:set
gera o ambiente atual, que inclui quaisquer variáveis locais não exportadas.env
é usado para iniciar programas em um novo ambiente e, sem argumentos, produzirá o que seria esse novo ambiente. Comoenv
está criando um novo ambiente, somente variáveis exportadas são trazidas, como é o caso de qualquer programa iniciado a partir desse shell. Por exemplo, gerando um segundo shell dentro do primeiro (eu costumava$$
representar prompts no shell interno):Observe que é a variável exportada, não apenas seu valor. Isto significa que uma vez que você
export FOO
,FOO
torna-se uma variável global e mostra-se em ambientes posteriores, mesmo se mudou mais tarde:fonte
locale
o shell atual não mostraria as atualizações?