Bash变量秒立即扩展还是延迟?
如果有一行在$SECONDS变量上运行了两次,那么该变量是否会保持相同的值,因为它在同一行上 例如,考虑一个简单的行,如:代码>回声$秒秒/代码>或<代码>回声$((秒/ 60))分钟和$((秒% 60))秒< /代码> .<Bash变量秒立即扩展还是延迟?,bash,Bash,如果有一行在$SECONDS变量上运行了两次,那么该变量是否会保持相同的值,因为它在同一行上 例如,考虑一个简单的行,如:代码>回声$秒秒/代码>或回声$((秒/ 60))分钟和$((秒% 60))秒< /代码> .< 因为秒在同一行上,所以秒是否总是相同的值?换句话说,它是否在执行行之前展开?$SECONDS究竟什么时候展开?如果您是这样问的,它们在传递到echo之前展开。但是,$SECONDS的两个实例将分别计算,AFAIK。因此,在这种情况下,当seconds勾号与两次计算之间的值交叉时,
因为秒在同一行上,所以秒是否总是相同的值?换句话说,它是否在执行行之前展开?$SECONDS究竟什么时候展开?如果您是这样问的,它们在传递到
echo
之前展开。但是,$SECONDS
的两个实例将分别计算,AFAIK。因此,在这种情况下,当seconds
勾号与两次计算之间的值交叉时,您将看到两个不同的值
试试这个:
i=0;
while true; do
read a b <<< "$SECONDS $SECONDS";
((i++));
((a!=b)) && printf "Iteration %-8d : %d %d\n" $i $a $b;
done
Iteration 3517346 : 467 468
Iteration 4157710 : 488 489
Iteration 4240219 : 491 492
i=0;
虽然真实;做
读一本很棒的插图!非常感谢。代码起了作用。我可以在Ubuntu中复制。这个例子还显示了计算是从左到右进行的…:-我没有证据证明它是有保证的。但是根据上面的输出,它似乎是这样发生的。POSIX标准规定算术扩展和命令替换同时发生,“从开始到结束”(我认为这是指解析过程中识别它们的顺序,即从左到右)。类似于echo$((秒))$(sleep 2)$((秒))
的东西似乎需要为SECONDS
显示不同的值,以保持其定义的行为。