Resposta inspirada em editar para OP. Por favor, não me mate ...
O pedido no script é muito importante. Primeiro, você precisa colocar a função em primeiro lugar. Você também precisa colocar a armadilha antes do loop. Algo como isso deve funcionar bem:
#!/bin/bash
function finish() {
echo "bye bye!"
}
trap finish SIGINT
for number in $(seq 10); do
echo "TODO: Insert work here..."
# Insert work to do here.
done