Bash变量SECONDS立即扩展还是延迟?

时间:2017-05-30 02:51:30

标签: bash

如果我有一行在$ SECONDS变量上操作两次,那么该变量会保持相同的值,因为它在同一行上吗?

例如,考虑一个简单的行,如echo $SECONDS $SECONDSecho $((SECONDS/60)) minutes and $((SECONDS%60)) seconds

SECONDS是否总是相同,因为它们在同一条线上?换句话说,它是否在执行该行之前得到扩展?什么时候$ SECONDS得到扩展?

1 个答案:

答案 0 :(得分:3)

在传递给echo之前,它们会被扩展,如果这就是你要求的那样。但是,$SECONDS的2个实例将单独评估,AFAIK。因此,如果seconds tick超过2次评估之间的值,您将看到2个不同的值。

试试这个:

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