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.
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.
Respostas:
export
propaga a variável para subprocessos.
Por exemplo, se você fez
FOO=bar
então um subprocesso que verificava FOO não encontraria a variável, enquanto
export FOO=bar
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:
FOO=one # Not an environment variable
export FOO # Now FOO is an environment variable
FOO=two # Update the environment variable, so sub processes will see $FOO = "two"
Os shells mais antigos não suportavam a export FOO=bar
sintaxe; você teve que escrever FOO=bar; export FOO
.
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.
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 é -
#!/bin/ksh
FOO=bar
No prompt, execute isto é
> . a.ksh
Isso executará os comandos no mesmo shell e o $ FOO estará disponível.
Enquanto que,
> a.ksh
Disponibilizará o $ FOO apenas dentro de a.ksh, após a chamada para a.ksh, ele não existiria.