Instynktownie zgodziłbym się z odpowiedzią Satō Katsury; to ma sens. Jednak testowanie jest dość łatwe.
Testowałem pisanie miliona linii na ekranie, pisanie (dołączanie) do pliku i przekierowywanie do /dev/null
. Przetestowałem kolejno każdy z nich, a następnie wykonałem pięć powtórzeń. To są polecenia, których użyłem.
$ 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)
Następnie narysowałem poniżej całkowite czasy.
Jak widać, założenia Satō Katsury były prawidłowe. Zgodnie z odpowiedzią Satō Katsury wątpię również, że czynnikiem ograniczającym będzie wyjście, więc jest mało prawdopodobne, aby wybór wyniku miał znaczący wpływ na ogólną szybkość skryptu.
FWIW, moja pierwotna odpowiedź miała inny kod, w którym plik był dołączany i /dev/null
przekierowywał się w pętli.
$ 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)
Jak zauważa John Kugelman w komentarzach, powoduje to znaczne obciążenie. W chwili obecnej pytanie nie jest tak naprawdę dobrym sposobem na przetestowanie go, ale zostawię go tutaj, ponieważ wyraźnie pokazuje koszt wielokrotnego otwierania pliku z poziomu samego skryptu.
W takim przypadku wyniki są odwrócone.