Como eu já disse em um comentário, env
não se encaixa no requisito, pois mostra apenas as variáveis exportadas.
O processamento de set
output para filtrar qualquer coisa que não se pareça com uma definição de variável é um hack não confiável. Em particular, você perderá uma parte das variáveis cujo valor contém um avanço de linha. Ainda pior, uma função cuidadosamente escrita pode fazer aparecer definições de variáveis falsas.
A solução mais simples é alternar temporariamente para o modo POSIX, no qual as funções não são consideradas (tipo de) variáveis:
set -o posix
set
set +o posix
Existe, no entanto, um problema se o seu modo padrão já é POSIX, ou se você quer que o comando funcione em qualquer modo POSIX no qual o shell está configurado.
Nesse caso, aqui está uma solução alternativa:
(set -o posix;set)
Isso só define o modo POSIX para o set
construído em um subshell e o modo shell pai não é afetado.