美文网首页Shell语言用例
bash算术运算((V++))和((V=V+1))的差异

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

作者: CodingCode | 来源:发表于2018-10-16 12:05 被阅读1次

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

相关文章

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

    今天不小心踩了一个坑,把他记在这里。我们在循环的时候通常会用一个变量计算循环了多次;这个变量每次循环累加1。常见的...

  • bash 算术运算

    bash 算术运算 基本算术运算符 加, -减, *乘, /除, **取模 bash中的let支持的算术运算符 使...

  • bash中的运算

    算术运算 bash中的算术运算:help let  +,-,*,/,%取模(取余),**(乘方) 实现算术运算:l...

  • note_7.3_bash脚本编程算术运算

    bash脚本编程之算术运算 +,-,*,/, **, %算术运算格式: let VAR=EXPRESSION VA...

  • (2)shell脚本编程进阶之运算和循环语句

    (一)算术运算 (1)bash 中的算术运算: help let +, -, *, /, % 取模(取余), **...

  • Bash编程005——运算符

    Bash编程005——运算符 本节学习Bash中的运算符。 赋值运算符 =,通用赋值运算符,适用于算术和字符串赋值...

  • bash的算术运算

    bash的算术运算 bash共支持三种算术运算方式 let 表达式 expr 表达式 双括号表达式 let表达式:...

  • 运算符相关话题

    运算符 赋值运算符 = 算术运算符 ** 幂运算 += 注意:注意,Bash并不支持浮点运算,Bash会将带小数点...

  • Bash脚本编程之算术表达式

    算术符号 Bash shell 脚本编程中的算术表达式所常用的算术运算符号包括:+,-,* ,/,%,**。其使用...

  • shell 运算符

    算术运算符 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最...

网友评论

    本文标题:bash算术运算((V++))和((V=V+1))的差异

    本文链接:https://www.haomeiwen.com/subject/xtthzftx.html