Bash - variável de ambiente shell vs [duplicado]

2

Eu quero esclarecer uma confusão que estou tendo na variável shell versus variável de ambiente. Fiz o seguinte teste, em que tenho uma variável de shell abc e export para uma variável de ambiente.

$ 
$ abc="shell var"
$ env | grep abc
$ echo $abc
shell var
$ export abc="env var"
$ env | grep abc
abc=env var
$ echo $abc
env var
$ unset abc
$ env | grep abc
$ echo $abc
$ 

Após a exportação, tento echo $abc .

Perguntas:

  • Exportar move a variável abc do shell para o ambiente OU cria uma cópia no ambiente e atribui a ela um novo valor?

  • Quando o segundo echo é feito após o export , o echo verifica se abc está no ambiente e, em seguida, o imprime, OU o abc foi completamente removido do shell e está presente apenas no ambiente e é por isso que echo imprime seu valor?

por Jake 13.08.2015 / 06:36

1 resposta

2

Does export move the variable abc from shell to the environment OR does it create a copy in the environment and assign it a new value ?

Nem export simplesmente marca uma variável para exportação.

Quando um comando externo é executado, o shell cria um ambiente para passar para ele. Apenas variáveis marcadas para exportação são adicionadas a esse ambiente. Como man bash explica:

shell variables and functions marked for export, along with variables exported for the command, [are] passed in the environment

Observe que env é um comando externo . Consequentemente, só pode relatar variáveis que foram exportadas.

Significado de "variáveis exportadas para o comando"

As atribuições de variáveis normais têm persistência: a variável existe até ser removida (não configurada). Também é possível criar variáveis temporárias para uso por um comando específico.

Como exemplo, vamos criar uma variável a para uso pelo comando env :

$ a=b env | grep ^a=
a=b
    
por 13.08.2015 / 06:58