Eu tenho um script como abaixo:
function dbgtrap {
echo "badvar is $badvar"
}
badvar=0
function some_func {
badvar=1
badvar=2
badvar=3
}
set -o functrace
trap dbgtrap DEBUG
some_func
trap - DEBUG # turn off the DEBUG trap
Depois de obter o script, obtive a saída:
badvar is 0
badvar is 0
badvar is 0
badvar is 1
badvar is 2
badvar is 3
Eu estava esperando algo como:
badvar is 0
badvar is 1
badvar is 2
badvar is 3
De onde vêm as duas primeiras linhas da saída?
A armadilha é invocada após cada linha de comando uma vez definida. Conforme mostrado usando a saída TRACE abaixo:
O shell IIRC invoca a armadilha no final do processamento, portanto, as 3 linhas de saída antes da saída da chamada de função de valores badvar.