首页 > 解决方案 > 对powershell中的空字符串应用拆分后,相等运算符不产生真/假输出的原因是什么?

问题描述

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

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

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

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

PS >

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

标签: powershell

解决方案


即使应用于空字符串,拆分操作也会生成一个包含 1 个元素的数组。参考SS64 - 比较运算符将其解释为:

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

例如,以下@('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

推荐阅读