Por padrão, set
mostra as variáveis do shell , não apenas as variáveis de ambiente. Em bash
funções são consideradas parte das variáveis. Consulte o link .
Se você usar env
ou printenv
, eles mostrarão o ambiente exportado para processos filhos, o que não é necessariamente igual ao seu bash
environment:
$ foo=1
$ printenv foo
$ export foo
$ printenv foo
1
Os bash declare
e typeset
builtins podem listar todos os tipos de variáveis, para omitir funções:
declare -F
A saída destes está em uma forma adequada para recriar o estado em um script de shell, portanto é um pouco detalhado, embora você possa distinguir entre matrizes, inteiros e outros tipos (dependendo da versão). Veja também a saída de export -p
.
E de link
você pode dizer bash para usar o modo POSIX, e set
se comporta "corretamente":
( set -o posix ; set )
Isso é executado em um subshell, de modo que não altere seu shell em execução e ele pega corretamente as variáveis que ainda não foram exportadas para o ambiente herdado.