今天不小心踩了一個坑面氓,把他記在這里兵钮。
我們在循環(huán)的時候通常會用一個變量計算循環(huán)了多次蛆橡;這個變量每次循環(huán)累加1。
常見的寫法有:
typeset NUM=0
while <condition>; do
<actions>
((NUM++))
done
或者:
typeset NUM=0
while <condition>; do
<actions>
((NUM=NUM+1))
done
((NUM++)和((NUM=NUM+1)有什么區(qū)別嗎掘譬。
- 對變量NUM來說效果是一樣的泰演,沒有區(qū)別。
- 但是副作用不一樣屁药,即語句的返回值不一樣粥血。
如下:
#!/bin/bash
typeset NUM1=0
((NUM1++))
echo "NUM1=${NUM1}, \$?=$?"
typeset NUM2=0
((NUM2=NUM2+1))
echo "NUM2=${NUM1}, \$?=$?"
運行結(jié)果為:
NUM1=1, $?=1
NUM2=1, $?=0
((V++))這種方式會把表達式的值作為返回值,從而會影響后面的判斷邏輯酿箭。
另一例子:
#!/bin/bash
typeset NUM1=0
typeset NUM2=0
typeset VAL1=0
typeset VAL2=0
VAL1=$((NUM1++))
echo "VAL1=${VAL1}, NUM1=$NUM1, \$?=$?"
VAL2=$((NUM2=NUM2+1))
echo "VAL2=${VAL2}, NUM2=$NUM2, \$?=$?"
運行結(jié)果:
VAL1=0, NUM1=1, $?=0
VAL2=1, NUM2=1, $?=0
VAL1的值是1复亏,post-increment操作先把NUM1的值賦給VAL1,然后再計算NUM1加1操作缭嫡。