Interessant. Dies scheint ein Bash-spezifisches Verhalten zu sein.
Ich habe 3 andere POSIX-kompatible Shells (zsh, dash, busybox) ausprobiert und in allen echo "$(trap)"
das gleiche Ergebnis (trap)
erzielt wie : Eine Subshell wird ausgeführt, und die Subshell zeigt keine EXIT
Falle.
(Beachten Sie, dass dies trap -p
spezifisch für Bash ist und ohne zusätzliche Parameter dasselbe tut wie trap
ohne Parameter.)
Das Verhalten von Bash ist möglicherweise nützlich : Es bedeutet, dass Sie schreiben können, a="$(trap)"
um die Trap-Einstellungen der übergeordneten Shell zu erfassen, die mit größerer Wahrscheinlichkeit interessant sind.
Wenn Sie jedoch eine Falle in der Unterschale setzen oder löschen, werden die Fallen der Unterschale anstelle der übergeordneten aufgelistet:
$ trap 'echo bye' EXIT
$ echo "$(trap TERM; trap)" # explicitly clear TERM, but leave EXIT alone
trap -- '' SIGTSTP
trap -- '' SIGTTIN
trap -- '' SIGTTOU
Sie haben also auch den seltenen Fall behandelt, in dem Sie an den Fallen der Unterschale interessiert sind.
Im Allgemeinen ist mir aufgefallen, dass die Bash-Entwickler anscheinend zusätzliche Anstrengungen unternommen haben, damit die Handhabung von Unterschalen gut funktioniert. Es ist auch viel einfacher, Hintergrund-Unterprozesse mit Bash zu verwalten als mit den minimaleren POSIX-Shells.