De man bash
(GNU bash, versão 5.2.21(1)-release (x86_64-pc-cygwin)):
set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
-a Each variable or function that is created or modified is given the export
attribute and marked for export to the environment of subsequent commands.
export [-fn] [name[=word]] ...
export -p
The supplied names are marked for automatic export to the environment of
subsequently executed commands.
Aqui vemos que isso export
não "dá o atributo de exportação" enquanto set -a
o faz. Por que? É um descuido?
Pergunta extra: qual a diferença entre “exportação” e “exportação automática”? (Ambos deveriam ser "exportação"? Ambos deveriam ser "exportação automática"?)
É o mesmo atributo de exportação, apenas os textos de ajuda não são muito consistentes entre si. O atributo export é como o shell marca variáveis para exportação (automática).
export
fornece o atributo às variáveis especificadas, enquantoset -a
o fornece a toda e qualquer variável na atribuição.Podemos verificar o valor e os atributos da variável nomeada com
declare -p var
. Aqui vemos que ambosexport
eset -a
fornecem o mesmo-x
sinalizador export():Se eu tivesse que adivinhar por que o texto de ajuda diz " exportação automática ", eu imaginaria que se refere à alternativa de exportar "manualmente" as variáveis através de atribuições no início do comando, por exemplo, aqui, nenhum var precisa ter o bandeira de exportação: