Shell语言用例

bash算术运算((V++))和((V=V+1))的差异

2018-10-16  本文已影响1人  CodingCode

今天不小心踩了一个坑,把他记在这里。
我们在循环的时候通常会用一个变量计算循环了多次;这个变量每次循环累加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)有什么区别吗。

  1. 对变量NUM来说效果是一样的,没有区别。
  2. 但是副作用不一样,即语句的返回值不一样。

如下:

#!/bin/bash

typeset NUM1=0
((NUM1++))
echo "NUM1=${NUM1}, \$?=$?"

typeset NUM2=0
((NUM2=NUM2+1))
echo "NUM2=${NUM1}, \$?=$?"

运行结果为:

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, \$?=$?"

运行结果:

VAL1=0, NUM1=1, $?=0
VAL2=1, NUM2=1, $?=0

VAL1的值是1,post-increment操作先把NUM1的值赋给VAL1,然后再计算NUM1加1操作。

上一篇下一篇

猜你喜欢

热点阅读