Diferença entre variável de ambiente e variável de shell

7

Diz-se que as variáveis de ambiente são herdadas em processos filhos, mas as variáveis de shell não são. No entanto, o teste a seguir mostra que as variáveis do shell são vistas no processo filho apenas como variáveis de ambiente. Qual a diferença?

> bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
> export TEST="ENV_TEST"    #env var
> sh -c "echo \$TEST"
ENV_TEST
> TEST="SHELL_TEST"         #shell var
> sh -c "echo \$TEST"       #shell var is seen in child process
SHELL_TEST
    
por ning 10.12.2012 / 09:24

1 resposta

9

Sua segunda atribuição TEST="SHELL_TEST" não desexporta a variável. Ainda é marcado como "ser herdado por crianças". E o valor herdado pelo filho é o valor atualmente definido no pai.
Em outras palavras, sua segunda atribuição não reverte o status de TEST para uma variável shell, mas ainda é uma variável de ambiente de acordo com essa terminologia.

Você teria que desexcitá-lo para que ele se torne não definido nos processos filhos:

$ typeset +x TEST
$ sh -c 'echo $TEST'

$
    
por 10.12.2012 / 09:34