我有一个包含数组的变量$try
,我希望$res
包含$try
的排序版本。这似乎很容易,但当$try
恰好包含一个空数组时,我无法实现这一点。
当$try
包含非空数组时,没有问题:
PS C:data> $try = @("a", "c", "b")
PS C:data> $res = $try | Sort-Object
PS C:data> $res
a
b
c
PS C:data> $res.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
然而,当输入数组为空时,输出对象是$null
,而不是(正如我所期望的(空数组:
PS C:data> $try = @()
PS C:data> $res = $try | Sort-Object
PS C:data> $res
PS C:data> $null -eq $res
True
PS C:data> $null -eq $try
False
我希望$res
是$try
的排序版本,即使$try
恰好包含一个空数组。在这种情况下,我希望$res
到也是一个空数组。
除了之外,还有其他方法可以做到这一点吗
PS C:data> $try = @()
PS C:data> if ($try) {$res = $try | Sort-Object} else { $res = @() }
PS C:data> $null -eq $try
False
PS C:data> $null -eq $res
False
即使$try
为$null或空数组,也可以强制$res
为这样的数组:
$try = $null # or an empty array @()
$res = @($try | Sort-Object)
# $res is now an array with 0 elements
$res.GetType()
结果
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
您可以初始化res变量并将结果排序附加到res:
$try = @()
$res=@()
$res += $try | Sort-Object