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 .