我在将现有的vbs脚本转换为PowerShell脚本时遇到了一些问题。我在这里用一些虚拟代码而不是原始代码来说明。在示例1中,我在数组中只有1组元素,在将数组变量返回给函数时,它只显示P。
然而在示例2中,我在数组中有2组元素,在将数组变量返回给函数时,它将正确显示元素。
如果在示例1和2中的函数内打印数组。获取结果没有任何问题。
我用Google搜索并且无法找到任何解决方案。非常感谢您的帮助。
示例1:
function testArray {
$array1 = @()
$array1 += ,@("Apple","Banana")
return $array1
}
$array2 = testArray
Write-Host $array2[0][1]
结果是“P”。
示例2:
function testArray {
$array1 = @()
$array1 += ,@("Apple","Banana")
$array1 += ,@("Orange","Pineapple")
return $array1
}
$array2 = testArray
Write-Host $array2[0][0]
结果是“Apple”。
答案 0 :(得分:6)
PowerShell展开从函数返回的数组。使用comma operator(,
,一元数组构造运算符)在返回的数组前面将它包装在另一个数组中,该数组在返回时展开,使嵌套数组保持原样。
function testArray {
$array1 = @()
$array1 += ,@("Apple","Banana")
return ,$array1
}
答案 1 :(得分:1)
当您声明单行数组时
$array1 = "Apple","Banana"
致电时:
$array1[0][1]
会发生这种情况:
此代码
function testArray {
$array1 = @()
$array1 += ,@("Apple","Banana")
return $array1
}
$array2 = testArray
Write-Host $array2[0][1]
完全相同:
$array1 = "Apple","Banana"
但是当您声明2行数组时:
function testArray {
$array1 = @()
$array1 += ,@("Apple","Banana")
$array1 += ,@("Orange","Pineapple")
return $array1
}
$array2 = testArray
Write-Host $array2[0][0]
会发生这种情况:
如果你的第一个代码需要苹果,只需调用数组[0]而不是数组[0] [0]。 array [0] [0]为你返回char。
抱歉我的英语不好,希望你能理解