Listar todas as variáveis do shell
bash : use set -o posix ; set . As opções POSIX estão lá para evitar a saída de muita informação, como definições de função. declare -p também funciona.
zsh : use typeset
Variáveis do shell e variáveis de ambiente
Uma variável de ambiente está disponível para os processos filho exec() -ed (como uma cópia. Se o processo pai alterar a variável, o ambiente filho não será atualizado). Uma variável não-ambiente está disponível apenas para o shell em execução atual e para os subshells fork() -ed.
(preenchido graças aos comentários)