Я інстинктивно погодився би з відповіддю Сат-Кацури; це має сенс. Однак протестувати досить просто.
Я перевіряв написання мільйона рядків на екран, запис (додавання) до файлу та переадресацію на /dev/null
. Я перевіряв кожне з них по черзі, потім робив п'ять повторів. Це команди, які я використав.
$ 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)
Потім я побудував загальні рази нижче.
Як бачите, припущення Сат-Кацури були правильними. Відповідно до відповіді Satō Katsura, я також сумніваюся, що обмежуючим фактором буде вихід, тому малоймовірно, що вибір результату суттєво вплине на загальну швидкість сценарію.
FWIW, моя оригінальна відповідь мала інший код, який мав файл додаватись і /dev/null
перенаправлятися всередину циклу.
$ 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)
Як в коментарях зазначає Джон Кугельман, це додає великі накладні витрати. Як стоїть питання про те , що це на самому ділі не правильний шлях , щоб перевірити це, але я залишу це тут , як це ясно показує вартість повторного відкриття файлу кілька разів з всередині самого сценарію.
У цьому випадку результати зворотні.