it-swarm-pt.tech

Diferença entre "a = b" e "export a = b" no bash

Qual é a diferença entre:

a=b

e

export a=b

Em bash?

Eu entendo que ambos definem variáveis ​​de ambiente, mas não entendo totalmente a diferença.

57
Adam Matan

export propaga a variável para subprocessos.

Por exemplo, se você fez

FOO=bar

então, um subprocesso que verificou FOO não encontraria a variável, enquanto

export FOO=bar

permitiria que o subprocesso o encontrasse.

Mas se FOO foi definido como uma variável de ambiente, então FOO=bar 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 o export FOO=bar sintaxe; você teve que escrever FOO=bar; export FOO.

59
Mike McQuaid

Se você não usar export, não está definindo uma variável de ambiente; apenas uma variável Shell.

Variáveis ​​Shell estão disponíveis apenas para o processo Shell; as variáveis ​​de ambiente estão disponíveis para qualquer processo subsequente, não apenas shells.

29
wfaulk

Além disso, se quiser ter a variável disponível para o Shell de chamada sem usar export, você pode fazer isso:

O arquivo a.ksh é -

#!/bin/ksh
FOO=bar

No Prompt, execute este é

> . a.ksh

Isso executará os comandos no mesmo Shell e $ FOO estará disponível.

Enquanto que,

> a.ksh

Tornará $ FOO disponível apenas dentro de a.ksh, após a chamada para a.ksh ele não existiria.

3
alok

Além do que já foi respondido, essas duas afirmações não definem necessariamente (ou seja, criar vs definir) uma variável de ambiente, pois "a" já pode existir como um Shell ou variável de ambiente.

No último caso, ambas as declarações são estritamente equivalentes.

2
jlliagre