在 powershell 中对空字符串应用拆分后,相等运算符不产生 True/False 输出的原因是什么?

CEG*_*GRD 1 powershell

当我对空字符串应用 split,然后应用相等比较时,我没有得到 $True 或 $False(见下文)。

更奇怪的是,当我将分割结果与空字符串进行比较时,我看到一些不可见的输出,而当我将分割结果与非空字符串进行比较时,我没有看到任何输出(见下文)。

PS > ''.split(',') -eq ''

PS > ''.split(',') -eq 'a'
PS > ''.split(',') -ne ''
PS > ''.split(',') -ne 'a'

PS >
Run Code Online (Sandbox Code Playgroud)

这种奇怪行为的原因是什么?

Sag*_*pre 5

即使应用于空字符串,拆分操作也会生成一个包含 1 个元素的数组。参考SS64 - Comparison Operators对此进行了解释:

当应用于数组时,比较运算符将用作过滤器,返回所有匹配的值。

例如,以下@('a','b','c','a') -eq 'a'将返回等于的 2 个元素a

为了在示例中获得正确的结果,您必须计算返回的元素数量并检查是否有。

(''.split(',') -eq '').Count -ge 1 # Is True
(''.split(',') -eq 'a').Count -ge 1 # Is False
(''.split(',') -ne '').Count -ge 1 # Is False
(''.split(',') -ne 'a').Count -ge 1 # Is True
Run Code Online (Sandbox Code Playgroud)