使用ForEach-Object循环遍历每行2D数组

时间:2014-07-21 16:55:09

标签: powershell foreach rows multidimensional-array

我尝试输入类似的内容:

$test = ("c2","d8","e9"),(4,1,9)
(0..2) | % { "$test[0][$_] $test[1][$_]" }

我希望它能输出:

c2 4
d8 1
e9 9

但我得到了这个:

System.Object[] System.Object[][0][0] System.Object[] System.Object[][1][0]
System.Object[] System.Object[][0][1] System.Object[] System.Object[][1][1]
System.Object[] System.Object[][0][2] System.Object[] System.Object[][1][2]

获得所需输出的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

您可以直接在字符串中使用变量,但是当您需要展开更复杂的内容(如属性,数组中的项或其他表达式)时,您需要使用子表达式$()

$test = ("c2","d8","e9"),(4,1,9)
(0..2) | % { "$($test[0][$_]) $($test[1][$_])" }
c2 4
d8 1
e9 9

答案 1 :(得分:2)

或者您可以使用字符串连接:

$test = ("c2","d8","e9"),(4,1,9)
(0..2) | % {$test[0][$_] + " " + $test[1][$_]}

输出:

c2 4
d8 1
e9 9

答案 2 :(得分:1)

您需要将它们放在子表达式中。原因是,当它在双引号内推断变量时,它从美元符号开始,并在有效变量名称的末尾停止外推。 [0]不是变量名的一部分,所以将它包装在$()中并且它可以正常工作:

$test = ("c2","d8","e9"),(4,1,9)
(0..2) | % { "$($test[0][$_]) $($test[1][$_])" }