Se você não tiver um arquivo no diretório atual cujo nome começa com uma barra invertida, esse é o comportamento esperado. Bash expande * para corresponder a qualquer nome de arquivo existente, mas :
If the pattern does not match any existing filenames or pathnames, the pattern string shall be left unchanged.
Como não havia nome de arquivo começando com \ , o padrão foi deixado como está e echo recebe o argumento \* . Esse comportamento é geralmente confuso, e alguns outros shells, como zsh , não o possuem. Você pode alterá-lo no Bash usando shopt -o failglob , que será então dê um erro como zsh e ajude-o a diagnosticar o problema em vez de se comportar mal.
Os caracteres de padrão * e ? podem aparecer em qualquer parte da palavra e os caracteres antes e depois são correspondidos literalmente. É por isso que echo \* e echo \ * fornecem uma saída tão diferente: a primeira corresponde a qualquer coisa que inicie com \ (e falha) e a segunda gera um \ e, em seguida, todos os nomes de arquivos.
A maneira mais direta de obter a saída desejada com segurança é provavelmente usar printf :
printf '\'; printf "%s " *
echo * não é seguro no caso de nomes de arquivos incomuns com - ou \ em nenhum caso.