Por causa do pedido, como as coisas são feitas.
Quando você faz:
cat abc > abc
> é o operador de redirecionamento de saída, quando o shell vê isso, ele abre o arquivo no modo de truncamento usando O_TRUNC flag com open(2) , ou seja, open("abc", O_TRUNC) , portanto o que estava lá no arquivo desaparecerá. Observe que esse redirecionamento é feito primeiro pelo shell antes da execução do comando cat .
Assim, quando o comando cat abc for executado, o arquivo abc já estará truncado, portanto, cat encontrará o arquivo vazio.