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



我试着输入:

$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]

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

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

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

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

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

输出:

c2 4
d8 1
e9 9

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

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

相关内容

  • 没有找到相关文章

最新更新