Bash中两种算术运算写法结果不同的原因咨询
Bash中两种算术运算写法结果不同的原因咨询
嗨,这个问题其实是因为Bash的算术扩展里,这两种写法用到了完全不同的运算逻辑,我给你拆解明白:
1. y=$((x+1)):直接计算加法,不修改原变量
这个写法非常直观,就是计算变量x加1的结果,然后把结果赋值给y,整个过程不会改变x本身的数值。当x=7时:
- 先计算
7+1得到8 - 把8赋值给y
- x仍然保持原来的7值
对应的代码验证:
x=7 y=$((x+1)) echo "y=$y, x=$x" # 输出:y=8, x=7
2. y=$((x++)):后置自增运算符,先赋值再自增
这里用到了Bash支持的后置自增运算符++,它的执行规则是:
- 先把变量x当前的数值作为整个表达式的结果返回
- 等表达式执行完成后,再把x的数值加1
当x=7时:
- 先把x当前的7作为结果赋值给y
- 之后x的数值自增为8
- 最终得到y=7,x=8的结果
对应的代码验证:
x=7 y=$((x++)) echo "y=$y, x=$x" # 输出:y=7, x=8
另外补充个小知识点:如果想让x和y最终都变成8,可以用前置自增运算符++x,它会先把x加1,再返回结果赋值给y:
x=7 y=$((++x)) echo "y=$y, x=$x" # 输出:y=8, x=8
备注:内容来源于stack exchange,提问作者tahzibi.jafar
相关产品推荐
相关产品推荐

