Qual é a diferença entre:
a=b
e
export a=b
Na festança?
Entendo que os dois definem variáveis de ambiente, mas não entendo completamente a diferença.
bash
shell
process
environment-variables
Adam Matan
fonte
fonte
Respostas:
export
propaga a variável para subprocessos.Por exemplo, se você fez
então um subprocesso que verificava FOO não encontraria a variável, enquanto
permitiria ao subprocesso encontrá-lo.
Mas se
FOO
tenha já sido definida como uma variável de ambiente, em seguida,FOO=bar
irá modificar o valor dessa variável de ambiente.Por exemplo:
Os shells mais antigos não suportavam a
export FOO=bar
sintaxe; você teve que escreverFOO=bar; export FOO
.fonte
export
", não está definindo uma variável de ambiente, mas apenas uma variável de shell. As variáveis do shell estão disponíveis apenas para o processo do shell; variáveis de ambiente estão disponíveis para qualquer processo subsequente, não apenas shells. Além disso, subshells são comandos contidos entre parênteses, que têm acesso a variáveis de shell, enquanto o que você está falando são processos filhos que são shells.Se você não usa
export
, não está definindo uma variável de ambiente; apenas uma variável shell.As variáveis do shell estão disponíveis apenas para o processo do shell; variáveis de ambiente estão disponíveis para qualquer processo subsequente, não apenas shells.
fonte
Além disso, se você deseja ter a variável disponível para o shell de chamada sem usar a exportação, você pode fazer isso:
O arquivo a.ksh é -
No prompt, execute isto é
Isso executará os comandos no mesmo shell e o $ FOO estará disponível.
Enquanto que,
Disponibilizará o $ FOO apenas dentro de a.ksh, após a chamada para a.ksh, ele não existiria.
fonte
Além do que já foi respondido, ambas as afirmações não definem necessariamente (ou seja, criar vs definir) uma variável de ambiente como "a" já pode existir como uma variável de ambiente ou shell.
No último caso, ambas as declarações são estritamente equivalentes.
fonte