Почему мой таймер показывает одно и то же значение даже после печати 100 цифр в bash

#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