* é um meta-caractere (ou curinga), todos os outros são tilde-prefix de exemplos ( ~ é padrão, ~+ e ~- são extensões).
Nenhum é variável, então não há nenhum ponto prefixando-os com $ .
echo $~ funciona bem, exibe $~ . Não há expansão porque ~ não é usado como um prefixo.
for i in *; ... funciona como projetado.