【问题标题】:Difference between && and || in c and unix shells?&& 和 || 的区别在 c 和 unix shell 中?
【发布时间】:2014-03-05 20:44:38
【问题描述】:

C 和 unix shell 中的这些运算符有什么区别?在 C 中,&& 是否意味着第一个过程,如果它是真的,第二个过程?在 unix shell 中会有什么不同?谢谢

编辑我不是指 && 和 || 之间的区别,而是它们在 c 语言和 unix shell 中的区别。

【问题讨论】:

  • 除了@chepner 描述的优先级差异之外,&&|| 在两种语言中都是短路求值运算符。人们不使用&& 来围绕在C 中为副作用而执行的操作进行流程控制,这是一个约定问题,而不是语言差异问题;如果你愿意,你可以在 C 语言中那样使用它们,人们只会奇怪地看着你(如果他们有任何好的风格感,就会拒绝你的补丁)。
  • ...重点是它们并不像这个问题所假设的那样不同。

标签: c shell unix operators


【解决方案1】:

优先级是一大区别。

考虑以下几点:

a || b && c

C 中,如果a 为真,则bc 都不需要计算,因为表达式被解析为a || (b && c)。但是,在 shell 中,

true || false && echo foo

将输出foo,因为它的解析方式与(a || b) && c 相同。


另外,请记住,某些 shell(如 bash)对 &&|| 有两种用途。除了用于构建如上所述的命令列表之外,它们还可以用作 C 风格的布尔运算符,以在 [[ ... ]] 命令中组合条件表达式。

【讨论】:

  • 更像是“短路评估”是最大的区别。
  • 是的,我想我搞砸了这个例子。在我能找到一个很好的例子之前,用模糊的术语来说,&&C 中的优先级高于||,但两者在 shell 中的优先级相同。
  • 好的,我想我现在选择了一个更好的例子。
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 2011-11-15
  • 2014-07-21
  • 2011-03-19
  • 2020-08-17
  • 2010-09-06
  • 2012-01-27
  • 1970-01-01
相关资源
最近更新 更多