#bash
#bash
Вопрос:
Итак, у меня есть следующий сценарий bash:
#!/bin/bash
start_timer=$(date %s)
echo $start_timer
for ((i=1;i<=100;i ));
do
echo $i
done
end_timer=$(date %s)
echo $end_timer
Я хотел определить, сколько времени займет процесс цикла, поэтому я инициализировал таймер начала и окончания и распечатал их.
Я замечаю, что и start_timer, и end_timer показывают одинаковое значение. Почему это так?
Комментарии:
1. bash работает медленно, но не настолько медленно.
Ответ №1:
Недостаточно точности, получаемой из date
команды, чтобы показать видимую разницу ( %s
целое число секунд), и ваш код выполняется менее чем за секунду. Чтобы проиллюстрировать, я увеличил время выполнения кода, увеличив N
его до значения, которое будет выполняться дольше 1 секунды. Пример ниже, обратите внимание, что я использовал оператор modulus ( %
) для иллюстрации прогресса:
start_timer=$(date %s)
echo $start_timer
for ((i=1;i<=1000000;i ));
do
[[ $((i % 100000)) == 0 ]] amp;amp; echo $i
done
end_timer=$(date %s)
echo $end_timer
Вывод:
1610944389
100000
200000
300000
400000
500000
600000
700000
800000
900000
1000000
1610944391
Используйте %s%N
вместо этого для захвата наносекунд.
Ответ №2:
Встроенную time
команду можно использовать, чтобы узнать, сколько времени требуется.
time for ((i=1;i<=100;i )); do echo $i; done
выводит
...
99
100
real 0m0.001s
user 0m0.001s
sys 0m0.000s