Resposta curta: expansão glob glob.
O shell recebe sua entrada e expande a parte .* antes de passá-la para ls , então você está fazendo com eficiência:
$ ls .bash_history .bash_profile .bashrc .coin_history .emacs ...
Por isso, lista cada entrada. Quando ele vê uma entrada de diretório, lista o conteúdo desse diretório, exatamente como você esperaria que o ls fizesse. Para ver apenas os arquivos / diretórios em seu diretório de trabalho, use a opção -d para ls :
$ ls -d .*
A opção -d informa ls para "listar os próprios diretórios, não seus conteúdos" (tirada da página ls man).