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

时间:2019-03-04 00:01:47

标签: bash shell loops variables 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

这是我得到的输出。 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

我在这里想念什么?

这是在Raspberry Pi下

2 个答案:

答案 0 :(得分:8)

#include <iostream> double* sqr(double d) { double s = d*d; return &s; } int main() { double v2 = 3.; double* v1 = sqr(v2); //question why not double* v1 = &sqr(v2) std::cout<<*v1; } 选择一个不同的名称。

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

来自Bash manual

  

“ SECONDS”

     

此变量扩展为自​​shell被设置以来的秒数。   开始。分配给该变量会将计数重置为值   分配,展开后的值将成为分配的值加上   自分配以来的秒数。

答案 1 :(得分:2)

$SECONDS实际上是一种特殊的Bash Variable,用于计时脚本已运行的秒数。因为它是一个计时器,所以它每秒钟自动递增,而脚本不执行任何操作。只需将变量名更改为其他名称,就可以了。