Mat*_*att 5 powershell parentheses logical-operators
考虑以下语句:
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")}
Run Code Online (Sandbox Code Playgroud)
它们将产生完全相同的输出。我一直认为第一个语句会失败,因为条件不在括号中。
查看about_Logical_Operators的示例-and并-or显示这些括号。
(1 -eq 1) -or (1 -eq 2)
Run Code Online (Sandbox Code Playgroud)
但是随后有关使用 Where-Object Cmdlet的技术网文章显示了此示例
$_.handles -gt 200 -and $_.name -eq "svchost"
Run Code Online (Sandbox Code Playgroud)
有一段时间我一直在告诉人们使用括号,因为“否则它就行不通”。区别是否纯粹是表面上的,最终无关紧要,我只是在推动我的个人喜好?
如果您查看Windows PowerShell 3.0 规范文档,它在第 7.10 节(逻辑运算符)中有这样的说明:
\n\n\n如果需要,逻辑 AND 运算符 -and 将其操作数指定的值转换为布尔值 (\xc2\xa76.2)。结果是可能转换的操作数值的逻辑 AND,并且具有 bool 类型。如果左操作数的计算结果为 False,则不计算右操作数。如果需要,逻辑 OR 运算符 -or 将其操作数指定的值转换为布尔值 (\xc2\xa76.2)。结果是可能转换的操作数值的逻辑或,并且具有 bool 类型。如果左操作数的计算结果为 True,则不计算右操作数。逻辑 XOR 运算符 -xor 将其操作数指定的值转换为布尔值 (\xc2\xa76.2)。结果是可能转换的操作数值的逻辑异或,并且具有 bool 类型。
\n这些运算符是左结合的。
\n
所以这决定了添加(或不添加)括号的规则。
\n| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |