If bash is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the command completes.
Essa é a razão pela qual o read não é interrompido.
O ^C não é impresso pelo shell, mas pelo terminal, devido à configuração echoctl . Se você executar stty -echoctl , ele não aparecerá.