Diferença entre “a = b” e “export a = b” no bash

45

Qual é a diferença entre:

a=b

e

export a=b

No bash?

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

    
por Adam Matan 06.08.2009 / 14:04

4 respostas

50

export propaga a variável para subprocessos.

Por exemplo, se você fez

FOO=bar

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

export FOO=bar

permitiria que o subprocesso o encontrasse.

Mas se FOO tiver definido como uma variável de ambiente, 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 suportam a sintaxe export FOO=bar ; você tinha que escrever FOO=bar; export FOO .

    
por 06.08.2009 / 14:06
27

Se você não usa export , não está definindo uma variável de ambiente; 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 subseqüente, não apenas shells.

    
por 28.09.2009 / 14:03
2

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

O arquivo a.ksh é -

#!/bin/ksh
FOO=bar

No prompt, execute isso é

> . a.ksh

Isto irá executar os comandos dentro do mesmo shell e $ FOO estará disponível.

Considerando que

> a.ksh

Disponibilizará $ FOO apenas dentro de a.ksh, após a chamada para a.ksh, não existiria.

    
por 06.08.2009 / 14:18
1

Além do que já foi respondido, ambas as instruções não necessariamente definem (por exemplo, create vs set) uma variável de ambiente já que "a" já pode existir como uma variável shell ou ambiente.

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

    
por 26.10.2011 / 00:48