Eu teria concordado instintivamente com a resposta de Satō Katsura; faz sentido. No entanto, é fácil o suficiente para testar.
Testei escrevendo um milhão de linhas na tela, escrevendo (anexando) em um arquivo e redirecionando para /dev/null. Testei cada um deles por vez e depois fiz cinco repetições. Estes são os comandos que eu usei.
$ time (for i in {1..1000000}; do echo foo; done)
$ time (for i in {1..1000000}; do echo foo; done > /tmp/file.log)
$ time (for i in {1..1000000}; do echo foo; done > /dev/null)
Em seguida, plotei o total de vezes abaixo.

Como você pode ver, as presunções de Satō Katsura estavam corretas. De acordo com a resposta de Satō Katsura, também duvido que o fator limitante seja a saída, por isso é improvável que a escolha da saída tenha um efeito substancial na velocidade geral do script.
FWIW, minha resposta original tinha um código diferente, que tinha o arquivo anexado e /dev/nullredirecionado dentro do loop.
$ rm /tmp/file.log; touch /tmp/file.log; time (for i in {1..1000000}; do echo foo >> /tmp/file.log; done)
$ time (for i in {1..1000000}; do echo foo > /dev/null; done)
Como John Kugelman aponta nos comentários, isso acrescenta muita sobrecarga. Como a pergunta está, essa não é realmente a maneira correta de testá-la, mas vou deixá-la aqui, pois mostra claramente o custo de reabrir um arquivo repetidamente de dentro do próprio script.

Nesse caso, os resultados são revertidos.