Você pode remover todas as exportações sem qualquer efeito nas variáveis exportadas, desde que você não use export
para avaliar duas vezes. Por duas vezes avaliar quero dizer:
var1=var2
export "${var1}=var3"
echo "$var2"
var3
Em vez disso, use:
set -a
... no topo do script. Todas as variáveis definidas a partir de então serão automaticamente exported
- o que incluiria variáveis que você talvez não tenha anteriormente export
ed. Alternativamente, você poderia apenas set -a
para uma parte do script e, posteriormente, set +a
para desfazer a configuração - também poderia funcionar como função.
Mas os subshells herdam automaticamente os valores das variáveis, portanto:
var1=value
( echo "$(echo "$var1")" )
value
export
não faz diferença nesse caso.
Mas se o script chamar outro script, ou qualquer outro executável que interprete valores que você tenha export
ed e você deixar de export
, esses valores não estarão mais disponíveis em seu ambiente. No exemplo a seguir, eu uso a variável de shell $PS1
- que define o conteúdo de um prompt do shell interativo - para demonstrar como as variações nas variáveis export
ed afetam os processos filhos.
export PS1="$(printf "this is another executable\n > ")"
echo exit | sh -i
###OUTPUT###
this is another executable
> exit
exit
Mas ...
PS1="$(printf "this is another executable\n > ")"
echo exit | sh -i
###OUTPUT###
sh-4.3$ exit
exit
Mas, novamente, se você declarar explicitamente variáveis de ambiente ao invocar um processo ...
PS1="$(printf "this is another executable\n > ")"
{
echo exit | PS1=$PS1 sh -i
echo exit | sh -i
}
###OUTPUT###
this is another executable
> exit
exit
sh-4.3$ exit
exit