Avrei istintivamente concordato con la risposta di Satō Katsura; ha senso. Tuttavia, è abbastanza facile da testare.
Ho testato la scrittura di un milione di righe sullo schermo, la scrittura (aggiunta) a un file e il reindirizzamento a /dev/null
. Ho testato ciascuno di questi a turno, quindi ho fatto cinque repliche. Questi sono i comandi che ho usato.
$ 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)
Ho quindi tracciato i tempi totali di seguito.
Come puoi vedere, le presunzioni di Satō Katsura erano corrette. Secondo la risposta di Satō Katsura, dubito anche che il fattore limitante sarà l'output, quindi è improbabile che la scelta dell'output abbia un effetto sostanziale sulla velocità complessiva dello script.
FWIW, la mia risposta originale aveva un codice diverso, che aveva il file aggiunto e /dev/null
reindirizzato all'interno del ciclo.
$ 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)
Come sottolinea John Kugelman nei commenti, ciò aggiunge molte spese generali. Allo stato attuale della domanda, questo non è davvero il modo giusto per testarlo, ma lo lascerò qui perché mostra chiaramente il costo di riaprire un file ripetutamente all'interno dello script stesso.
In questo caso, i risultati sono invertiti.