Cuando lo hace ls *el *se está ampliando antes de que se pasa a ls. Es decir, si tenemos tres archivos ( a, by c) en un directorio se ls *está ejecutando realmente ls a b c.
Cuando Bash no puede expandirse, pasa a través de la cadena sin procesar¹. Es por eso que ve los comodines en el error, junto con un mensaje no encontrado. lsTraté de mostrar la lista de un archivo literalmente llamado *.bash*.
Entonces, ¿ por qué no se expandió eso? Bueno, por defecto, el globbing (como se llama esta expansión comodín) no devolverá archivos ocultos. Puede cambiar esto con shopt -s dotglob(eso no persistirá a menos que lo pegue en su .bashrc- podría deshabilitarse por defecto por una buena razón, así que tenga cuidado con eso), aquí hay una demostración rápida:
$ ls *.bash*
ls: cannot access *.bash*: No such file or directory
$ shopt -s dotglob
$ ls *.bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
La excepción a esto es —como ya has mostrado— cuando ya has declarado explícitamente que los archivos estarán ocultos con un patrón similar .bash*. Simplemente anula la dotglobconfiguración predeterminada :
$ shopt -u dotglob # unset dotglob
$ ls .bash*
.bash_aliases .bash_history .bash_logout .bashrc .bashrc.save
De todos modos, además de ese capricho, espero que esto te ayude a comprender lo que está sucediendo bajo la superficie.
Hay otras shoptbanderas que alteran la forma en globbing obras: extglob, failglob, globstar, nocasegloby nullglob. Ellos y una serie de otras shoptbanderas están documentados como parte del manual de Bash .
Del mismo modo, la página sobre Coincidencia de patrones debería ser una buena lectura.
¹ A menos que estén failglobo nullglobestén configurados.