使用括号进行多个逻辑运算

时间:2014-08-28 14:39:51

标签: powershell logical-operators parentheses

考虑以下陈述:

Get-ChildItem -Recurse *.vbs | Where-Object{$_.name -like "d*" -and $_.name -like "*s"}
Get-ChildItem -Recurse *.vbs | Where-Object{($_.name -like "d*") -and ($_.name -like "*s")}

它们将产生完全相同的输出。我一直认为第一个陈述会失败,因为条件不在括号中。

查看about_Logical_Operators -and-or的示例会显示这些括号。

(1 -eq 1) -or (1 -eq 2)

但是Using the Where-Object Cmdlet的技术网文章显示了这个例子

$_.handles -gt 200 -and $_.name -eq "svchost"

有一段时间我一直在告诉人们使用括号,因为"否则它将不起作用"。差异纯粹是装饰性的,最终无关紧要,我只是在推动个人偏好?

1 个答案:

答案 0 :(得分:2)

如果查看Windows PowerShell 3.0 Specification document,请在第7.10节(逻辑运算符)中说明:

  

逻辑AND运算符 - 并转换由其指定的值   必要时操作的bool(§6.2)。结果是逻辑AND   可能转换的操作数值,并具有类型bool。如果   左操作数计算结果为False,不评估右操作数。   逻辑OR运算符 - 或转换由其指定的值   必要时操作的bool(§6.2)。结果是逻辑OR   可能转换的操作数值,并且类型为bool。如果是左边   操作数计算结果为True,不评估右操作数。该   逻辑XOR运算符-xor转换由其指定的值   bool的操作数(§6.2)。结果是可能的逻辑异或   转换的操作数值,并具有类型bool。

     

这些运算符是左关联的。

因此,这决定了添加(或不添加)括号的规则。