感谢PowerShell Logic,当左操作数是集合(而不是布尔值)时,我熟悉一些复杂的-eq工作原理,-eq将返回一个与右操作数相等的元素数组。在3.0规范中:
如果左操作数指定的值不是集合,则结果具有bool类型。否则,结果可能是一个空的、无约束的一维数组,该数组包含与右操作数指定的值相比测试True的集合的元素。
尽管如此,我发现了一个对我来说不太合理的案子。如果我使用一个也是一个数组的元素声明一个数组,那么我实际上无法让-eq与该元素匹配:
$a = @( 1, @(2, 3) )
$a -eq 1 # results in an array with a single element, containing 1
$a -eq @( 2, 3 ) # results in an empty array到底怎么回事?要判断这是PowerShell包装混合类型数组元素、包装二维数组、值与引用类型相等检查的问题,还是其中的任何子集并不容易。
发布于 2013-05-04 00:54:25
我认为,与此相关的是,.NET中的数组比较只比较两个对象引用同一个对象,而不是它们具有等效的值。考虑:
# ~> @(2,3).Equals(@(2,3))
False
# ~> $arr = @(2,3)
# ~> $arr.Equals($arr)
True
# ~> $arr.Equals(@(2,3))
False
# ~> @(1, $arr) -eq $arr
2
3https://stackoverflow.com/questions/16367782
复制相似问题