O caractere !
aciona a expansão do histórico, como você descobriu. Essa etapa ocorre antes que um comando seja salvo no histórico, para que possa ser salvo no histórico com a expansão já concluída. Quando ocorre um erro na expansão do histórico, o bash interrompe o processamento do comando e nunca é salvo no histórico.
A expansão de histórico permite que comandos anteriores ou partes de comandos anteriores sejam substituídos no comando atual. Se isso foi feito antes de salvar o comando no histórico, isso pode significar algo diferente a cada vez que é executado, porque os comandos anteriores são diferentes em cada instância. Consulte o link
Para referência, o comportamento de zsh
é diferente. Ele salvará o comando, mas com a expansão do histórico ausente.