Você pode redirecionar para um arquivo temporário:
file=$(mktemp) || exit
{
rm -f -- "$file"
trap
traps=$(cat)
} > "$file" < "$file"
Observe que, nesse sentido, dash
' trap
não é POSIX como POSIX não exigir que:
var=$(trap)
ser tratado como um caso especial em que as armadilhas não são redefinidas na subcamada.
zsh
e mksh
também têm o problema. Em zsh
, no entanto, você pode fazer:
trap | IFS= read -rd '' traps