Como uma variável de ambiente.
Isso significa que qualquer processo filho iniciado pelo processo filho herdará a variável também.
Teste:
$ export FOO=bar
$ sh
$ sh
$ sh
$ echo "$FOO"
bar
$ exit
$ exit
$ exit
Acima, o shell que criou a variável de ambiente FOO
iniciou um novo shell interativo. Isso começou outro, e aquele começou outro. Dentro desse shell de bisneto, $FOO
tem o valor bar
.
Outro teste mostrando que, se uma subshell muda a variável de ambiente, a mudança é transportada para subshells posteriores (mas não é propagada para os shells-pai):
$ export FOO=bar
$ ( ( echo "$FOO"; FOO=quux; ( ( ( echo "$FOO" ) ) ) ) )
bar
quux
$ echo "$FOO"
bar
(neste exemplo, não importa que FOO
seja exportado como ( ... )
subshells também herdam variáveis shell, mas o efeito teria sido o mesmo se cada ( ... )
tivesse sido um processo totalmente separado)
Note que as variáveis de ambiente estão disponíveis para qualquer qualquer processo iniciado a partir do shell, não apenas scripts de shell. Não faria sentido que um programa em C ou awk
os herdas como variáveis de shell, pois não há nenhum conceito desses tipos de variáveis nessas linguagens (variáveis de ambiente são pares estritamente chave-valor, enquanto variáveis shell podem ser digitadas como inteiros, somente leitura, matrizes, matrizes associativas, etc., dependendo das capacidades do shell).