Поскольку третья ловушка создается в подоболочке, она также активируется / запускается при выходе из этой оболочки, пытаясь удалить третий файл до его создания. Поэтому третий файл существует после того, как скрипт выполнен.
Каждый раз, когда trap […] SIGNAL
вы перезаписываете ловушку для этого сигнала, в верхней оболочке выживает только вторая ловушка. Поэтому первый файл существует после того, как скрипт выполнен.
А echo
в ловушке или, возможно set -o xtrace
, покажет вам лучше, что происходит. Вы также можете запустить trap
самостоятельно, чтобы увидеть, какие ловушки действуют.