Я бы инстинктивно согласился с ответом Сато Кацуры; это имеет смысл. Тем не менее, это достаточно легко проверить.
Я протестировал запись миллиона строк на экран, запись (добавление) в файл и перенаправление на /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)
Как отмечает Джон Кугельман в комментариях, это добавляет много накладных расходов. Как стоит вопрос о том , что это на самом деле не правильный путь , чтобы проверить это, но я оставлю это здесь , как это ясно показывает стоимость повторного открытия файла несколько раз из внутри самого сценария.
В этом случае результаты меняются местами.