Resposta curta:
defina LC_ALL = C como o comportamento esperado
pauhel@permafrost:~$ b="你1265-3好"
paul@permafrost:~$ echo ${b//[0-2]/}
你1265-3好
paul@permafrost:~$ export LC_ALL=C
paul@permafrost:~$ echo ${b//[0-2]/}
你65-3好
Resposta longa:
O comportamento esperado depende da ordenação de intercalação, que é dependente da implementação do código do idioma / SO. O padrão POSIX deixa especificamente indefinido, exceto para o local C. (Bash chama uma biblioteca externa para isso e, a um palpite, parece que isso volta para a ordenação ASCII se apenas caracteres ASCII estiverem presentes).
Versões posteriores do bash têm uma opção de shell que permite especificar algo como você espera.
Veja:
para mais informações.