O * na verdade está sendo expandido pelo bash (qualquer que seja o seu shell) e então é passado para o echo . O comando echo não faz nada além de imprimi-lo na saída padrão. Leia este documento - Expansão do nome do arquivo . Diz-se
Bash scans each word for the characters "*", "?", and "[". If one of these characters appears, then the word is regarded as a PATTERN, and replaced with an alphabetically sorted list of file names matching the pattern. If no matching file names are found, and the shell option nullglob is disabled, the word is left unchanged. If the nullglob option is set, and no matches are found, the word is removed.
Então, na verdade, quando o bash não consegue encontrar qualquer correspondência, ele deixa '*' inalterado e o echo imprime isso.
Razão
A razão pela qual o bash não retorna uma instrução vazia por padrão, pois pode haver casos em que o usuário não queira usar o '*' como caractere curinga e, portanto, ele não precisa da expansão de '*'. E, portanto, nesse caso, expandir o '*' para uma string vazia seria errôneo. No entanto, esse comportamento padrão pode ser substituído pela opção nullglob
.