Respostas:
Este é um trecho da página de manual do Bash:
exportar [-fn] [nome [= palavra]] ...
exportar -p
Os nomes fornecidos são marcados para exportação automática para o ambiente de comandos executados posteriormente. Se a opção -f for fornecida, os nomes se referem às funções ...
Se você precisar apenas da variável no ambiente atual, não será necessário usar a exportação.
var=value
Editar:
Sem exportação: apenas ambiente atual. Com exportação: ambiente atual e ambientes filho.
Aqui está uma demonstração do efeito da exportação na disponibilidade de uma variável em um ambiente filho e que as mudanças no ambiente filho não afetam o pai:
$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
Após o primeiro eco ( echo "parent..."), você vê "123" e "456" porque ambos var1e var2estão ativos no ambiente atual. Você não vê um valor para var3porque ainda não está definido.
Após a linha que " var3=..." inicia, você não vê um valor var1porque não foi exportado. Você fazer ver um valor para o var2porque ele foi exportado. Você vê um valor para var3porque ele foi criado para o ambiente criança única .
( bash -cé equivalente a executar um script com o conteúdo do argumento para a -copção. Um script ou outro executável ou, nesse caso, o argumento para bash -cse tornar filho do ambiente atual que, como resultado, é claro, o filho da criança pai.)
No "script" os valores da variável são alterados. Agora ele gera esses novos valores.
Depois que o "script" é concluído, a execução retorna ao ambiente pai (a linha de comando neste caso). Após o último eco, você vê os valores originais porque as alterações feitas no ambiente filho não afetam o pai.
export- disponibilizar variáveis para esses ambientes filho.
Você diz que
Estou sempre usando o comando export para definir a variável de ambiente
Pela maneira como você escreveu isso, parece que você está realmente tentando perguntar como você faz uma variável ambiental persistir. Para isso, é necessário que você coloque sua export VAR="foo"declaração no arquivo $ HOME / .bash_profile (se estiver usando o bash). Se você deseja que essa variável ambiental persista para todos os usuários, exceto o root, adicione-a ao / etc / profile. Se você desejar que ele seja adicionado também ao usuário root, defina-o em /root/.bash_profile.
Isso funcionará para todos os shells de logon em que o bash é o shell de escolha. Para shells sem login, você precisa usar .bashrc. Não tenho idéias a oferecer para outras conchas: D
a exportação é a maneira mais direta de fazer isso, então por que não deixar por isso mesmo?
export VARIABLE=value # for Bourne, bash, and similar shells
setenv VARIABLE value # for csh and similar shells
FOO=BAR; executethisprogram O programa executethisprogramNÃO saberá o valor da variável FOO. Por outro lado, ao usar: FOO=BAR; export FOO; executethisprogram O programa executethisprogramsaberá o valor da variável FOO.
export FOOé um comando que marca a variável FOOpara que ela possa ser acessada por processos filhos do ambiente em que o comando foi emitido. Esse pai pode ser um script ou um shell interativo.
Você também pode fazer algo assim:
VAR=val application
Por exemplo:
LANG=C ls --help
saída em inglês.
LANG=pl_PL ls --help
saída em polonês (se disponível).
No passado, em sh, você não podia exportar VAL = val. Você tinha que
VAL=val; export VAL
lspor exemplo) sem afetar o valor dessa variável no ambiente atual (pai).
lsé um filho do processo a partir do qual foi executado. Se eu digitar lsem um prompt de comando, o shell interativo é o pai e lso filho. Se eu tiver um script que use ls, o script será o pai e lso filho.