O solitário ! no início de um comando nega o status de saída do comando ou pipeline : se o comando sair em 0 , ele será alternado para 1 (falha) e, se sair de um valor diferente de zero, será transformado em uma saída 0 (com êxito).
Esse uso está documentado no manual do Bash:
If the reserved word ‘!’ precedes the pipeline, the exit status is the logical negation of the exit status as described above.
Um ! sem o seguinte comando nega o comando empty, que não faz nada e retorna true (equivalente a o comando : ). Assim, inverte o verdadeiro para um falso e sai com o status 1, mas não produz nenhum erro.
Há também outros usos de ! dentro do test e os comandos [[ , onde negam um teste condicional. Estes não estão relacionados com o que você está vendo. Tanto na sua pergunta como nos casos, isso não está relacionado à expansão do histórico e o ! é separado de quaisquer outros termos.