Isso acontece porque a expansão de variáveis é feita antes que o comando seja executado. No momento em que a expansão de variável ocorre, foo
não está definido, portanto, ele é expandido para a sequência vazia. O comando então é executado, configurando foo
.