【发布时间】:2019-01-19 17:12:15
【问题描述】:
如果 cmdlet 返回数组数组,例如:
function test() {
$results = New-Object System.Collections.ArrayList
$array = @()
for ($idx = 0; $idx -lt 3; $idx++) {
$obj = New-Object PSObject -Property @{
"key1" = "value1";
}
$array += @($obj)
}
[Void] $results.add($array)
return ,$results.TOArray()
}
那么当返回值被赋值时,输出就不一样了。
如果直接运行test会显示:
test
Length : 3
LongLength : 3
Rank : 1
SyncRoot : {@{key1=value1}, @{key1=value1}, @{key1=value1}}
IsReadOnly : False
IsFixedSize : True
IsSynchronized : False
Count : 3
分配给变量时:
$result = test
$result
key1
----
value1
value1
value1
如果 cmdlet 返回一个一级数组,test 和 $(test) 的输出是相同的。
function test() {
$array = New-Object System.Collections.ArrayList
for ($idx = 0; $idx -lt 3; $idx++) {
$obj = New-Object PSObject -Property @{
"key1" = "value1";
}
$array += @($obj)
}
return ,$array
}
test 的输出:
key1
----
value1
value1
value1
【问题讨论】:
-
去掉
return ,$results.ToArray()和test中的逗号将返回与将其分配给变量时完全相同的内容。逗号将您使用$results.ToArray()获得的数组添加到具有一个元素的新数组中。 Powershell 在分配给变量时会解开(展平)它。刚刚运行test所看到的输出是使用逗号创建的新数组的数组属性。 -
这是表达式与命令的关系:
(test)是表达式,但test是命令。 -
@Theo 但如果删除逗号,则结果是一个 psobject 数组,而不是一个数组数组。这不是预期的结果。
标签: powershell