TL; DR: use (set -o posix ; set)
De acordo com o manual do Bash, você pode usar o set
comando interno para mostrar todas as variáveis de ambiente que foram definidas. O comando set
também exibirá as definições de quaisquer funções. Se você quiser apenas ver as variáveis, e não as funções, você pode ativar o modo POSIX antes de executar o comando set. A maneira mais fácil de fazer isso é com set -o posix
, mas isso deixará o modo POSIX ativado até que você o desligue com set +o posix
.
Portanto, o comando a seguir mostrará todas as variáveis de ambiente definidas usando um subshell sem afetar a conformidade POSIX no seu shell atual.
(set -o posix ; set)
@RedGrittyBrick e @iglvzx sugeriram usar o comando env
, no entanto, este comando não fornecerá uma listagem completa das variáveis de ambiente. env
mostrará apenas as variáveis que foram marcadas para exportação. Compare a saída de env | sort
e export -p
e você verá o que quero dizer. Você pode executar comm -23 <(set -o posix; set) <(env|sort)
se quiser ver quais variáveis de ambiente não estão sendo exportadas.
O motivo da discrepância é que env
é um executável separado, em oposição a set
, que é um comando interno do shell. De acordo com o manual do Bash, quando é executado um comando que não é um comando ou função interna do shell, ele recebe apenas variáveis de ambiente que foram marcadas para exportação no Bash . Existem muitas variáveis que não são exportadas. Portanto, se você deseja ver todas as variáveis que o seu shell definiu, você deve usar o comando set
conforme indicado no manual.
Você pode testar esse comportamento com facilidade usando os seguintes comandos.
MY_TEST_VARIABLE="This is my test variable."
set | grep MY_TEST_VARIABLE
env | grep MY_TEST_VARIABLE
Você verá que set
fornece saída, enquanto env
não.