bash中变量后递增/递减和预递增/递减之间有什么区别?

时间:2013-06-13 09:20:39

标签: bash

bash手册中的

算术评估部分列出了以下运算符:

   id++ id--
          variable post-increment and post-decrement
   ++id --id
          variable pre-increment and pre-decrement

据我了解,++x--xx在执行其他操作之前增加或减少变量?例如x++

$ x=5; echo $(( ++x / 2 ))
3
$ x=5; echo $(( x++ / 2 ))
2
$ 

但是,x++x--何时有用?一般来说,bash中的变量后递增/递减和预递增/递减之间的区别是什么?

2 个答案:

答案 0 :(得分:1)

引自Increment and decrement operators

  

在支持两种版本的运算符的语言中,    pre -increment和 pre -decrement运算符将其操作数递增(或递减)1,表达式的值为结果   递增(或递减)值。相反,帖子 - 增量   和 post -decrement运算符增加(或减少)的值   它们的操作数为1,但表达式的值是操作数   原始值先前到增量(或减量)操作。

所以,你会发现:

$ x=5; echo $(( x++ / 2 ))
2
$ echo ${x}                     // The effect of post-increment is visible here
3

答案 1 :(得分:1)

操作后和操作前都改变(增加/减少)变量值。

不同之处在于他们评估的内容:pre-ops在更改之后评估变量的值,并且在操作之后 - 在更改之前评估值

当未使用评估值时,没有区别。即这两行具有相同的效果:

((x++))
((++x))

pre-ops和post-ops都用于消除显式赋值的需要。即使代码更短。所以,而不是写这个:

x=$((x + 1))
y=$((x * 5))

你可以这样写:

y=$((++x * 5))

相反,而不是:

y=$((x * 5))
x=$((x + 1))

你可以这样写:

y=$((x++ * 5))

这些操作通常用在循环体和循环控制表达式中。