2017-05-30 27 views
2

如果我有一行對$ SECONDS變量進行兩次操作,那麼該變量將保持相同的值,因爲它位於同一行上?Bash變量SECONDS立即擴展還是延遲?

例如考慮一條簡單的線,如echo $SECONDS $SECONDSecho $((SECONDS/60)) minutes and $((SECONDS%60)) seconds

SECONDS會始終保持相同的值,因爲它們位於同一行嗎?換句話說,它是否在行被執行之前被擴展?什麼時候$ SECONDS得到擴展?

回答

3

它們在傳遞到echo之前展開,如果這是您要求的。但是,這兩個$SECONDS將單獨評估,AFAIK。因此,如果seconds勾號已超過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 
+0

大圖! – codeforester

+0

謝謝。代碼有所幫助。我能夠在Ubuntu中重現。 – newguy

+0

此示例還顯示評估發生從左到右...... :-D – anishsane