Arrays Powershell-声明数组数组不是那么容易吗?

Arrays Powershell-声明数组数组不是那么容易吗?,arrays,powershell,declaration,Arrays,Powershell,Declaration,我试图用数组来描述一个小的“列表”。我观察到一种奇怪的行为: function write-it-out([array] $arrays) { foreach($a in $arrays) { write-host "items" $a[0] $a[1] } } $arrayOfArrays1 = @( @("apple","orange"), @("monkey","bea

我试图用数组来描述一个小的“列表”。我观察到一种奇怪的行为:

function write-it-out([array] $arrays)
{
  foreach($a in $arrays)
  {
   write-host "items" $a[0] $a[1]
  }
}


$arrayOfArrays1 = @( 
  @("apple","orange"),
  @("monkey","bear")
)

$arrayOfArrays2 = @( 
  @("android","linux")
)


# it works 
write-it-out $arrayOfArrays1
# it wont
write-it-out $arrayOfArrays2
第一种情况输出预期的两行,内容如下:

苹果橙
猴子熊

但是第二个函数调用输出的不是预期的

android linux项目

但是

项目a n
项目l i

有人知道为什么吗?如何描述一个数组,其中只包含一个数组,而不是多个数组?那么如何修复它呢?提前谢谢大家

我不太清楚原因,但当您声明
$arrayOfArrays2
时,PowerShell会立即展开外部阵列

> $arrayOfArrays2.Count
2

> $arrayOfArrays2[0]
android
为了避免这种情况,可以在外部数组声明中添加一个额外的逗号,如下所示

> $arrayOfArrays2 = @(,@("android","linux"))

> $arrayOfArrays2.Count
1

> $arrayOfArrays2[0]
android
linux

> write-it-out $arrayOfArrays2
Items android linux

解决方法是有效的,但请注意,
@(@(“android”、“linux”))
中没有外部数组,因为
@()
不构造数组,它保证某个东西是数组-如果已经是数组,它就不使用它,粗略地说,请参阅链接副本的公认答案,链接问题的答案很好地解释了问题;至于为什么只打印数组元素的第一个字符:如果索引到字符串中,它将被视为一个字符数组,index
[0]
返回第一个字符;e、 g.:
'foo'[0]
返回
'f'