数组在PowerShell中展开

时间:2012-06-17 08:42:06

标签: powershell

我正在尝试理解在Posh中展开的数组,以下让我感到困惑。在这个例子中,我返回包含在另一个数组中的数组(使用逗号),它基本上在外部数组在返回时展开后给我原始数组。当我通过对带有结果的变量使用数组运算符(@)来间接包装结果时,为什么我得到正确的结果(只是数组),但是如果我在函数上直接使用@,则在数组中得到一个数组? @运算符对于其参数的不同类型是否表现不同? @运算符和数组展开是否有任何PS帮助文章?

function Unroll
{
    return ,@(1,2,3)
}

Write-Host "No wrapper"
$noWrapper = Unroll #This is array[3]
$noWrapper | % { $_.GetType() }

Write-Host "`nWrapped separately"
$arrayWrapper = @($noWrapper) #No change, still array[3]
$arrayWrapper | % { $_.GetType() }

Write-Host "`nWrapped directly"
$directArrayWrapper = @(Unroll) #Why is this array[1][3] then?
$directArrayWrapper | % { $_.GetType() }
Write-Host "`nThe original array in elem 0"
$directArrayWrapper[0] | % { $_.GetType() }

由于

2 个答案:

答案 0 :(得分:0)

如果从Unroll函数中删除逗号运算符,它的行为就像您期望的那样。

function Unroll
{
    return @(1,2,3)
} 

在这种情况下,$arrayWrapper = @($noWrapper)$directArrayWrapper = @(Unroll)相同。

您可以在此this SO question

中找到有关使用article about array literals In PowerShell展开数组的详细信息

答案 1 :(得分:0)

this other question,似乎

  

将结果(数组)放在分组表达式中(或   子表达式,例如$())使其再次符合资格展开。

这似乎就是这里发生的事情。