A diretiva de linha de comando >
ocorre antes que o comando ls
seja executado. O shell tem que estar pronto para salvar a saída que o comando ls
pode produzir, portanto, ele deve criar e abrir o arquivo para gravação.
Quando ls
é executado pelo shell, o arquivo foo
existe e, portanto, ls
envia "foo", que é o que você encontrou no arquivo foo
.