Você poderia fazer:
printvars() (
eval 'declare() { printf declare; printf " %q" "$@"; echo; }'"
$(declare -p)"
)
printvars
Isso pode ser facilmente estendido para omitir variáveis somente de leitura, como:
printvars() (
eval 'declare() {
[[ $1 = *r* ]] && return
printf declare; printf " %q" "$@"; echo
}'"
$(declare -p)"
)