try unset -v SECONDS
first On Tue, Aug 6, 2024, 17:24 Bash-help via Bug reports for the GNU Bourne Again SHell <bug-bash@gnu.org> wrote: > Reading the manual at > <https://www.gnu.org/software/bash/manual/bash.html#Bash-Variables> > regarding the SECONDS variable, it states that > " [..] Assignment to this variable resets the count to the value assigned, > and the expanded value becomes the value assigned plus the number > of seconds since the assignment. [..]" > > This implies that assigning the variable at time X with value Y would > reset SECONDS to Y. When expanding the variable at time X+Z the > value should be Y+Z. The text also implies whole seconds, i.e. not > milliseconds or other fractions of seconds, are considered. However, it > would seem as if the > underlying mechanism to update SECONDS (the system clock) > are actually considering fractions of seconds and not whole seconds. > Below is a small programming that shows my point: > > #!/bin/bash > > while true; do > SECONDS=0 > sleep 0.5 > if [ "$SECONDS" != "0" ]; then > printf 'This is unexpected: %s != 0\n' "$SECONDS" > fi > done > > As we sleep less than a full second the expanded value of SECONDS should > never be greater than 0 but it sometimes is. I guess this is because the > assignment might occur, say X.7 seconds and the expanded value will then > read (X+1).2 which would be rounded down to (X+1). > > This might not be a bug but it is at least misleading when reading the > documentation and produces unexpected and inconsistent behaviour in some > cases. > > Version of Bash used to test this behaviour: > GNU bash, version 5.2.32(1)-release (x86_64-pc-linux-gnu) >