Você não pode fazer isso.
Como os aliases foram expandidos somente após a expansão do histórico e a linha inteira foi lida de uma só vez, quando foo
foi executado, o processo de expansão do alias desapareceu, é muito tarde para o shell reconhecer um novo alias.
A melhor maneira de definir o alias em .zshrc
ou usar a função resposta do jimmij ou usar eval
:
alias foo=ls; eval foo
Há um caso especial com zsh -c . Nesse caso, esses aliases que foram definidos em .zshenv
serão expandidos.