Isso se chama globbing (link para a documentação do bash, mas isso não é específico para o bash).
Quando você executou rm [0-9].txt
, o shell expandiu [0-9].txt
para a lista de arquivos presentes no diretório que correspondia a esse padrão. Em seguida, essa lista é passada como um argumento para rm
(cada arquivo como um argumento separado).
Então, não, o shell não expandiu para 0.txt 1.txt ... 9.txt
, ele olha para os arquivos que combinaram.
Por que você executa apenas rm 5.txt
, não há padrão glob para expandir, então o argumento é passado como é para rm
, que percebe que o arquivo não existe e reclama.
Tente outra coisa: o mesmo comando rm [0-9].txt
, mas em um diretório que não tenha nenhum arquivo que corresponda ao padrão. Você notará rm
reclamando novamente, mas desta vez ele dirá:
rm: cannot remove '[0-9].txt': No such file or directory
Isso é o que acontece (por padrão, de qualquer maneira) se um padrão glob não corresponder a nada: o shell não expande e deixa intocado.
Referência POSIX para esse tipo de correspondência de padrões: Notação de correspondência de padrões .