Principalmente semântica. Embora combinar as strings de comando em variáveis seja útil para fins de script, não é bom para o aliasing. Um motivo visível é a conclusão - enquanto vários scripts de conclusão, como bash_completion , podem lidar com aliases (o que infelizmente nunca foi meu caso), fazendo com que eles suponham que variáveis são extensíveis a comandos podem torná-lo confuso.
O segundo motivo é alias permitir que você crie atalhos de comando sem usar nenhum comando mágico nem caractere como $ para executá-los. Desta forma, a substituição é transparente e permite substituir as configurações padrão para alguns programas. Um bom exemplo é ls , que geralmente é alias como ls --color=auto por padrão. Os usuários não precisam saber disso para ver a saída colorida. Algumas distribuições alias rm e comandos relacionados como rm -i , para que funcionem no modo interativo e possam evitar remoções acidentais.
Variáveis, por outro lado, podem ser úteis para alguns usos que não requerem imitação de binários. Um exemplo amplo e bom é EDITOR variável ambiental. Isso torna possível não apenas executar seu editor favorito usando $EDITOR , mas também fazer com que outros programas (que podem não ter acesso ao shell) possam executá-lo, tirando seu valor do ambiente de execução.
Pode haver algumas outras coisas das quais não conheço, mas o resultado é o mesmo: esses comandos devem ser usados como pretendem.