A maneira mais portátil é export -p.
export -plista variáveis exportadas. Geralmente é assim declare -x, se o seu shell tiver declare.
As conchas no estilo Bourne atualmente em uso devem suportar export -p, conforme exigido pelo POSIX :
Quando -p for especificado, a exportação gravará na saída padrão os nomes e valores de todas as variáveis exportadas, no seguinte formato:
"export %s=%s\n", <name>, <value>
se o nome estiver definido e:
"export %s\n", <name>
se o nome não estiver definido.
O padrão continua explicando que o valor da variável é exibido de tal maneira que geralmente permite que seja usado posteriormente no lado direito de =uma atribuição. Isso quer dizer que pode ser citado. Cascas diferentes podem exibi-las de maneira diferente, mas com o mesmo efeito. export -pfunciona mesmo em conchas que não têm declareembutido, como o Dash .
$ dash -c 'export -p | grep HOME=' # busybox sh and other ash give the same output.
export HOME='/home/ek'
$ posh -c 'export -p | grep HOME=' # ksh93, mksh, lksh, and others give the same output.
export HOME=/home/ek
Eu canalizei a saída para grepobter compacidade, mas se você não a filtrar, obterá a lista completa de suas variáveis exportadas. Da sua pergunta, parece que é o que você pode achar mais útil.
Alguns shells, como o Bash, usam um formato não padrão, a menos que seja explicitamente instruído a se comportar de maneira compatível com POSIX. No Bash export -pfornece a mesma saída que declare -xpor padrão.
$ bash -c 'export -p | grep HOME='
declare -x HOME="/home/ek"
$ bash -c 'POSIXLY_CORRECT= export -p | grep HOME='
export HOME="/home/ek"
$ bash -c 'set -o posix; export -p | grep HOME='
export HOME="/home/ek"
$ bash --posix -c 'export -p | grep HOME='
export HOME="/home/ek"
$ ln -s /bin/bash sh
$ ./sh -c 'export -p | grep HOME=' # Invoking bash as sh also puts it in POSIX mode.
export HOME="/home/ek"
O Zsh mostra um formato não padrão, mesmo quando a compatibilidade POSIX está ativada:
$ zsh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
$ zsh -c 'emulate -R sh; export -p | grep HOME='
typeset -x HOME=/home/ek
$ ln -s /bin/zsh sh
$ ./sh -c 'export -p | grep HOME='
typeset -x HOME=/home/ek
Em qualquer caso, você pode extrair representações portáteis (que podem ser citadas) pesquisando uma palavra seguida por =. Isso não depende das palavras anteriores da linha, desde que elas não precedam imediatamente =, o que não deveriam. Por exemplo:
% export -p | grep -oE '\w+=.*'
HOME=/home/ek
LANG=en_US.UTF-8
LESSCLOSE='/usr/bin/lesspipe %s %s'
....
Observe que nem todas as entradas necessariamente possuem =. Isso ocorre porque as variáveis podem ser desmarcadas, mas exportadas. Essas entradas são filtradas pelo grepcomando acima, que pode ou não ser o que você deseja.
Na maioria das vezes, você só quer inspecionar a saída e assim você não vai se importar se as entradas são precedidas por export, declare -x, typeset -xou outra coisa. Então apenas corra export -p.
Testei esses comandos no Ubuntu 16.04 LTS com versões oficialmente empacotadas de cada shell.