- 论坛徽章:
- 0
|
原帖由 linuxleio 于 2009-6-1 18:09 发表 ![]()
这个可以说是shell对逻辑表达式语法检测的问题:
A && B #如果A为true,则还要运行表达式B,判断其是否也为true;如果A为fale,整个逻辑表达式就为fale,会跳过运行表达式B。
A || B #如果A为fal ...
你说的理论很正确。那类似楼主的两个逻辑操作符写到了一行,我在补充下,也解释了前面“kwokcn 帅哥 (狼烟) ”的两个例句
A && B || C
如果A为true,&&符必须进行B的判断,B也为true则C就不会执行了。但是B自身却是0,则 A && B整个为false,判断结束做b++运行,同时执行C。
例子:
a=0;b=0;c=0;((a==0))&&((b++))||((c++)); echo $a,$b,$c
结果:0,1,1
如果b=1,那么在判断b++时,b自身就是true,则 A && B 整个为true,就不执行C了。这也就是前面朋友执行下面例句,结果为0,2,0的原因了。
a=0;b=1;c=0;((a==0))&&((b++))||((c++)); echo $a,$b,$c
结果:0,2,0
另外,题外话,给你个建议,类似这种判断最好用if判断,逻辑操作符有些副作用,还有shell中0为真,非0为假,perl中0和空为false,其他为真。差别很大,容易混乱。
[ 本帖最后由 coffee_45 于 2009-6-3 15:53 编辑 ] |
|