shell中(())运算结果和退出值的不一样

先看一个例子:shell

var=-2 && (( var+=2 )) && echo $varide

没有任何输出it

var=0 && (( var+=2 )) && echo $varclass

2
di

var=0 && (( var++ )) && echo $varview

没有任何输出vi

var=-1 && (( var++ )) && echo $varco

0editor

很迷惑吧。再看

var=0 && (( ++var )) && echo $var

1

(())双园括号运算不是退出值(exit),var=-2时,(( var+=2 ))结果是0,逻辑值false,也就不打印。

var=0时(( var+=2 ))结果非0,逻辑值true,打印。

再看更有意思的,

var=0时(( var++ )) ,是先运算再加赋值加1,因此结果是0,逻辑值就是false,结果不打印。

var=-1 && (( var++ ))就很显然,先运算,结果是-1,逻辑值true,打印

var=0 && (( ++var ))就反证了这个现象,这个是先赋值加1,再运算,那么结果就是1,逻辑值true,打印

这个在写shell的时候必须注意。

相关文章
相关标签/搜索