用于-eq的PowerShell多维集合逻辑

时间:2013-05-03 21:26:12

标签: powershell equality equals-operator

感谢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包装混合型数组元素,包装二维数组,值与引用类型相等检查的问题,还是其中任何子集,都不是特别容易。

1 个答案:

答案 0 :(得分:2)

我认为它必须具有这样的事实:.NET中的数组比较只比较两个对象引用同一个对象,而不是它们具有相同的值。考虑:

# ~> @(2,3).Equals(@(2,3))
False

# ~> $arr = @(2,3)

# ~> $arr.Equals($arr)
True

# ~> $arr.Equals(@(2,3))
False

# ~> @(1, $arr) -eq $arr
2
3