Que local o shell atribui a variável normal?

0

Como você sabe, o próprio shell bash também é processado.

Se eu usar o comando export a=c , o shell alocará dinamicamente a variável a no local onde as variáveis de ambiente residem. (Essa seção de ambiente é descrita no descritor de memória do processo) Então, eu acho variável a atribuída ao ambiente seção. Além disso, pode ser recuperado do comando printenv

Mas, quando eu uso o comando b=f e, em seguida, uso echo $b , a expansão de variáveis é operada. Então o resultado é f . De onde vem essa variável?

Se eu usar o comando echo $a , posso entender que o shell carrega essa variável da seção de variáveis de ambiente.

Mas se eu usar o comando echo $b , onde o shell carrega essa variável? É a seção de heap do processo ou em algum lugar?

    
por A.Cho 07.02.2016 / 14:09

2 respostas

4

Todas as variáveis do shell estão no mesmo armazenamento.

Na inicialização, todas as variáveis de ambiente são importadas.

Quando um novo comando é iniciado, um novo ambiente é criado para esse novo comando. Todas as variáveis marcadas para exportação ou que foram importadas do ambiente original são colocadas nesse novo ambiente específico para o novo comando.

    
por 07.02.2016 / 14:44
4

Se você atribuir um valor que não influencia o ambiente do shell em execução (não sei se isso é possível).

O shell usa memória interna para todas as suas variáveis (pelo menos para as escritas). Você pode ver facilmente que:

env - TESTVAR=foo bash

echo $TESTVAR 
foo

TESTVAR=bar

echo $TESTVAR 
bar

echo $$
13833

cat /proc/13833/environ
TESTVAR=foo
    
por 07.02.2016 / 14:27