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的時候必須注意。

相關文章
相關標籤/搜索