这看起来非常基本,但我不知道它是如何或为什么这样表现的:
function ReturnStuff{
$a=1,2,3,4,5
$a.ForEach{
return $_
}
}
ReturnStuff
为什么这会给我: 1 2 3 4 五 而不只是1?
答案 0 :(得分:7)
看起来您正在使用参数作为脚本块调用ForEach
([System.Array]
中的函数)。从本质上讲,您是在循环的每次迭代中定义并返回{ Return $_ }
。
这意味着ReturnStuff
每次都会捕获输出,并且由于此函数对此行的输出不执行任何操作,因此返回所有输出:
$a.ForEach{ return $_ }
此行为类似于$a | Foreach-Object { return $_ }
那该怎么办?
改为使用ForEach
循环(不要与Foreach-Object
混淆):
ForEach ($item In $a) { return $item }
选择从所有脚本块返回的第一个值:
$a.ForEach{ return $_ } | Select -First 1