使用以下 bash 脚本:
#!/bin/bash
let SECONDS=5
until [[ "$SECONDS" -le "1" ]]; do
echo SECONDS $SECONDS
(( SECONDS -= 1 ))
# sleep 1
done
我看到奇怪的行为。也就是说,如果我取消注释sleep 1
循环继续但计数器不递减,我会看到如下输出:
$./mvce.sh
SECONDS 5
SECONDS 5
SECONDS 5
SECONDS 5
SECONDS 5
SECONDS 5
SECONDS 5
删除该行会产生预期的结果:
$./mvce.sh
SECONDS 5
SECONDS 4
SECONDS 3
SECONDS 2
我不太确定为什么会这样。我可以将变量重命名为其他名称,并且事情按预期工作,所以似乎有些东西sleep
会破坏我的SECONDS
变量。
这很令人惊讶,为什么调用 sleep 会覆盖SECONDS
我脚本中的变量?