Parece que a interceptação ERR é executada porque a função FuncA tem um status de saída diferente de zero. Conforme documentado em man bash
the exit status of a function is the exit status of the last command executed in the body.
Qual, nesse caso, foi o [[ -d mydir2 ]]
. Você pode adicionar um true
como o último comando na função para impedi-lo.
A construção if
é diferente porque (mesmo manual):
The exit status is the exit status of the last command executed, or zero if no condition tested true.
Eu recomendaria usar if
em vez de adicionar true
.