Powershell 对多个逻辑操作使用括号
考虑以下陈述:Powershell 对多个逻辑操作使用括号,powershell,logical-operators,parentheses,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")} 它们将产生完全相同的输出。我一直认为第一个语句会失败,因为条件不在括号中 查看-和和-或的示例,显示这些括号 (1 -eq
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")}
它们将产生完全相同的输出。我一直认为第一个语句会失败,因为条件不在括号中
查看-和
和-或
的示例,显示这些括号
(1 -eq 1) -or (1 -eq 2)
但《科技网》的文章展示了这个例子
$_.handles -gt 200 -and $_.name -eq "svchost"
一段时间以来,我一直在告诉人们使用括号,因为“否则它将不起作用”。这种差异纯粹是表面上的,最终也无关紧要,我只是在强调我个人的偏好吗?如果你看一下,它在第7.10节(逻辑运算符)中说:
逻辑AND运算符-AND转换由其指定的值
如有必要,将操作数设置为bool(§6.2)。结果是逻辑AND
可能转换的操作数值的,并且具有类型bool。如果
左操作数的计算结果为False,而右操作数的计算结果为False。
逻辑OR运算符-OR转换由其指定的值
如有必要,将操作数设置为bool(§6.2)。结果是的逻辑OR
可能转换的操作数值,并且具有bool类型。如果左边
操作数的计算结果为True。不计算右操作数。这个
逻辑异或运算符-XOR转换由其
操作数到bool(§6.2)。结果是逻辑的异或
已转换操作数值,并且具有类型bool
这些运算符是左关联的。
因此,这决定了添加(或不添加)括号的规则。我对该文本的解释是,如果需要,不管是否存在括号,它都会先计算左边的内容,然后再计算右边的内容。这就是我要说的吗?是的。逻辑表达式是从左到右求值的,如果默认求值与您期望的值不一致,则您有责任使用括号。
(1 -eq 1) -or (1 -eq 2)