Este é um trecho da página do manual do Bash:
export [-fn] [name[=word]] ...
export -p
The supplied names are marked for automatic export to the environment of subsequently executed commands. If the -f option is given, the names refer to functions...
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: somente 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 alterações 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ê verá "123" e "456" porque ambos, var1
e var2
, estão ativos no ambiente atual. Você não vê um valor para var3
porque ainda não está definido.
Após a linha que inicia " var3=...
", você não vê um valor para var1
porque não foi exportado. Você faz ver um valor para var2
porque foi exportado. Você vê um valor para var3
porque foi definido para o ambiente filho somente .
( bash -c
é equivalente a executar um script com o conteúdo do argumento para a opção -c
. Um script ou outro executável ou, neste caso, o argumento para bash -c
se torna um filho do ambiente atual que, como resultado, é claro, o pai da criança.)
No "script" os valores da variável são alterados. Agora, gera esses novos valores.
Quando o "script" for concluído, a execução retornará 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.