No Bash 4.4 ou posterior , você pode usar o ${parameter@a}
expansão de parâmetros do shell para obter uma lista de atributos sobre um parâmetro, incluindo se ele é exportado.
Aqui está uma função simples demonstrando ${parameter@a}
, que informará se uma determinada variável é exportada, dado seu nome:
function is_exported {
local name="$1"
if [[ "${!name@a}" == *x* ]]; then
echo "Yes - '$name' is exported."
else
echo "No - '$name' is not exported."
fi
}
Exemplo de uso:
$ is_exported PATH
Yes - 'PATH' is exported.
$ foo=1 is_exported foo
Yes - 'abc' is exported.
$ bar=1; is_exported bar
No - 'abc' is not exported.
$ export baz=1; is_exported baz
Yes - 'baz' is exported.
$ export -n baz; is_exported baz
No - 'baz' is not exported.
$ declare -x qux=3; is_exported qux
Yes - 'qux' is exported.
Como funciona:
O formato retornado por ${parameter@a}
é um caractere por atributo, com o significado de cada caractere de atributo vindo das opções correspondentes do declare command - neste caso, queremos procurar x
- exportados.