O [m é provavelmente o final de um código de escape ANSI \e[m (= redefinido para cores e atributos normais, formato curto) com o caractere ESC inicial ( \e ) removido.
Meu palpite seria que seu grep esteja colorindo sequências de caracteres correspondentes quando executado interativamente, e a detecção de interatividade está falhando quando executada como parte de uma função de shell cuja saída se torna parte do prompt.
O sinal de porcentagem na saída aciona o processamento especial em prompts e, se %\e não significar nada, ele será simplesmente excluído.
Tente definir sua função bat assim:
bat () { acpi | grep --color=never -oP "(\d+)%" }