如何在 Powershell 中对多个变量进行逻辑或运算
How to logical OR multiple variables in Powershell
我以为这很简单。我确定是的。但是,我好像破解不了。
我有 3 个函数 return 一个 true
或 false
值。
在稍后的 if
评估中,我试图将 3 个结果合乎逻辑 or
。
像这样:
if (Fnc1 -or Fnc2 -or Fnc3) { write-host "Yes" }
不仅 Powershell 突出显示第一个 Fnc1 的语法与其他 Fnc1 的语法不同,而且根据我所知道的 Fnc1 的值,它只是 return判断真假。
我知道这行得通:
if ((Fnc1 -eq $true) -or (Fnc2 -eq $true) -or (Fnc3 -eq $true)) { write-host "Yes" }
但是,这似乎有点过分而且没有必要。
我错过了什么?
当您将 -or
标记放在函数名称之后时,PowerShell 会尝试将其解析为函数参数。在 ()
:
中包围每个函数调用
if ((Fnc1) -or (Fnc2) -or (Fnc3)) { write-host "Yes" }
另一种方法是使用 -contains
集合运算符。看...
function Get-True {$True}
function Get-False {$False}
@((Get-True), (Get-False), (Get-True)) -contains $True
输出=True
如果所有这些都是 Get-False
,结果将是 False
。
请注意,此方法要求 所有函数调用 为 运行,然后 -contains
运算符才能测试任何内容。这意味着 -or
解决方案会更有效,因为这会 运行 每个函数按顺序调用并在 -or
满足时停止。
如果函数调用占用大量时间或资源,-or
解决方案可以 高效得多。
感谢@SagePourpre 指出这一点。 [咧嘴一笑]
我以为这很简单。我确定是的。但是,我好像破解不了。
我有 3 个函数 return 一个 true
或 false
值。
在稍后的 if
评估中,我试图将 3 个结果合乎逻辑 or
。
像这样:
if (Fnc1 -or Fnc2 -or Fnc3) { write-host "Yes" }
不仅 Powershell 突出显示第一个 Fnc1 的语法与其他 Fnc1 的语法不同,而且根据我所知道的 Fnc1 的值,它只是 return判断真假。
我知道这行得通:
if ((Fnc1 -eq $true) -or (Fnc2 -eq $true) -or (Fnc3 -eq $true)) { write-host "Yes" }
但是,这似乎有点过分而且没有必要。
我错过了什么?
当您将 -or
标记放在函数名称之后时,PowerShell 会尝试将其解析为函数参数。在 ()
:
if ((Fnc1) -or (Fnc2) -or (Fnc3)) { write-host "Yes" }
另一种方法是使用 -contains
集合运算符。看...
function Get-True {$True}
function Get-False {$False}
@((Get-True), (Get-False), (Get-True)) -contains $True
输出=True
如果所有这些都是 Get-False
,结果将是 False
。
请注意,此方法要求 所有函数调用 为 运行,然后 -contains
运算符才能测试任何内容。这意味着 -or
解决方案会更有效,因为这会 运行 每个函数按顺序调用并在 -or
满足时停止。
如果函数调用占用大量时间或资源,-or
解决方案可以 高效得多。
感谢@SagePourpre 指出这一点。 [咧嘴一笑]