bash变量的值加倍-为什么?

Lev*_*von 3 variables bash shell loops raspberry-pi

我设置了一个简单的Shell脚本,每隔X秒捕获一次图像。由于某种原因,每次循环时X的值似乎都会翻倍。

#!/bin/bash

# basic setup for time-lapse

SECONDS=1

while true
do
    DATE=$(date +"%Y-%m-%d_%H%M%S")
    filename=${DATE}_img.jpg
#   fswebcam -r 1280x720  --timestamp "%a %Y-%b-%d %H:%M (%Z)"  /home/pi/JPGS/$filename
    date
    echo "pausing for ${SECONDS} seconds"
    sleep $SECONDS
    date
    echo "====="
done
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出。SECONDS的值未在循环内操纵,因此我对这里发生的事情感到困惑。此外,原始间隔为30秒,出于测试目的,我将其更改为1秒,日期调用也用于测试/调试。

Sun Mar  3 17:51:57 CST 2019
pausing for 1 seconds
Sun Mar  3 17:51:58 CST 2019
=====
Sun Mar  3 17:51:58 CST 2019
pausing for 2 seconds
Sun Mar  3 17:52:00 CST 2019
=====
Sun Mar  3 17:52:00 CST 2019
pausing for 4 seconds
Sun Mar  3 17:52:04 CST 2019
=====
Sun Mar  3 17:52:04 CST 2019
pausing for 8 seconds
Sun Mar  3 17:52:12 CST 2019
=====
Sun Mar  3 17:52:12 CST 2019
pausing for 16 seconds
Sun Mar  3 17:52:28 CST 2019
=====
Sun Mar  3 17:52:28 CST 2019
pausing for 32 seconds
Sun Mar  3 17:53:00 CST 2019
=====
Sun Mar  3 17:53:00 CST 2019
pausing for 64 seconds
Sun Mar  3 17:54:04 CST 2019
=====
Sun Mar  3 17:54:04 CST 2019
pausing for 128 seconds
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?

这是在树莓派下

Kei*_*son 8

为选择其他名称$SECONDS

$SECONDS是内置的shell变量。它扩展到自启动外壳以来的秒数。

Bash手册

“ SECONDS”

此变量扩展为自​​启动外壳以来的秒数。分配给该变量会将计数重置为分配的值,并且扩展后的值将成为分配的值加上分配以来的秒数。

  • 这就解释了略有不同的语言,例如“如果将值分配给SECONDS,则后续引用返回的值是指自分配以来的秒数加上所分配的值。” (2认同)