关于shell的问题

unknow 发布于 2012/07/25 15:27
阅读 464
收藏 0

是这样的之前写一个shell中有这样一小部分

 declare -i i=4                                                              

 ((i<3 ? i+=2 : i++))

  echo $i

这样是没有问题的,可以正常输出,但是

  declare -i i=4                                                               

  ((i<3 ? i++ : i+=2))

  echo $i

也就是说把 i+=2 和 i++ 换了位置后就会报错,请问这是什么原因呢??

加载中
1
情天大圣
情天大圣

将i+=2括起来:

 

declare -i i=4                                                               

  ((i<3 ? i++ : (i+=2)))

  echo $i
逝水fox
逝水fox
回复 @unknow : 因为?:三目运算符的优先级比+=高 所以你最初那个写法他认为是(i<3?i++:i) += 2 了 这个明显是错的
unknow
unknow
回复 @情天大圣 : 恩,谢了
情天大圣
情天大圣
回复 @unknow : 具体原因我也不太清楚,这种逻辑最好还是用条件分支实现,三目运算符的可读性比较差
unknow
unknow
能解释下为什么么?放前边为什么不用括起来呢?
2
JustForFly
JustForFly
在shell中,以下三者的运算优先级的顺序是: i++ >   cond? expr1: expr2 > +=
情天大圣
情天大圣
学习了!
返回顶部
顶部