0

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中的变量后增量/减量和预增量/减量有什么区别?

4

2 回答 2

1

从增量和减量运算符引用:

在支持这两种运算符版本的语言中, 前置增量和前置减量运算符将其操作数递增(或递减)1,表达式的值是结果递增(或递减)的值。相反,自增和自减运算符将其操作数的值增加(或减少)1,但表达式的值是操作数在增加(或减少)操作之前的原始值。

所以,你会发现:

$ x=5; echo $(( x++ / 2 ))
2
$ echo ${x}                     // The effect of post-increment is visible here
3
于 2013-06-13T09:26:17.120 回答
1

post-ops 和 pre-ops 都会改变(增加/减少)变量的值。

不同之处在于它们的评估结果:pre-ops 评估为更改变量的值,而 post- 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))

大多数情况下,这些操作用于循环体和循环控制表达式。

于 2013-06-13T09:39:09.773 回答