PowerShell 中的逻辑运算符优先级

geo*_*ced 5 powershell

为什么这个表达式返回 False 而不是 True ?

$true -or $false -and $false

-and-or正如Microsoft Powershell 文档所确认的那样,应优先于.

但看起来表达式被评估为($true -or $false) -and $false而不是$true -or ($false -and $false)

有人可以向我解释我在这里缺少什么吗?

mkl*_*nt0 10

链接的文档没有声明优先-and-or- 相反,它声明-and-or- 可能令人惊讶的是[1] -在 PowerShell 中具有相同的优先级[2] 。

因此:

$true -or $false -and $false
Run Code Online (Sandbox Code Playgroud)

是 - 由于隐含的左关联性 - 评估为:

($true -or $false) -and $false  # -> $false
Run Code Online (Sandbox Code Playgroud)

换句话说:用于(...)根据需要覆盖此左关联性:

$true -or ($false -and $false)  # -> $true
Run Code Online (Sandbox Code Playgroud)

[1] 请参阅GitHub 问题 #8512进行讨论。

[2]文档列表-and -or -xor同一行,这意味着所有这些运算符具有相同的优先级。

  • 我习惯了评估逻辑运算符的标准方法(我应该说“正确的方法”),其中 和 始终优先于 or,所以这确实是一个惊喜,并且肯定会加入我的 PowerShell 陷阱集合! (2认同)