No shell Z, o caractere ^
é um caractere globbing estendido que é reconhecido pela parte expansão do nome do arquivo do processamento de comandos.
Como o manual do shell Z explica, o padrão ^M
corresponde a qualquer nome de arquivo exceto um que corresponda ao padrão M
. Então, o que está acontecendo é que o comando está sendo expandido para stty erase
, seguido por todos os nomes de arquivos no diretório atual, exceto um chamado M
se houver um.
É simplesmente o caso de você ter um arquivo chamado «CCPP»
no diretório atual que é o primeiro na lista resultante quando o padrão ^M
globbing é expandido.
Cite ou escape do metacaractere:
-
stty erase '^M'
-
stty erase \^M
Ou desative a globalização estendida da shell Z:
-
setopt no_extended_glob
Compare a experiência de essa pessoa que tinha um nome de arquivo diferente e cujo padrão de exclusão era ?
. A pessoa no link realmente fez a citação acima, e realmente forneceu um argumento (uma string contendo 3 caracteres em vez de um especificador de exatamente 1 caractere) que era inválido.
Naturalmente, o CR é uma escolha bizarra para um caractere erase
especial. Mas eu não vou entender porque na Terra você quer fazer isso. ☺
Leitura adicional
- " Geração de nome de arquivo ". Manual do shell Z. sourceforge.