ForEach-Object cmdlet不带-Parallel参数的情况下,它的实现是循环调用一个匿名函数,依次把管道传入的集合里的每个对象当作上下文来运行代码块。所以在代码块里使用return,退出的是当前这次调用,外层循环继续对下个传入对象调用匿名函数。下面是实验:
"A", "B", "C", "D" | ForEach-Object {
if ($_ -eq "C") {
Write-Host "嘿嘿嘿,C被我跳过啦!"
return
}
Write-Host $_
}
输出如下:
PS C:\Users\Curious\Desktop> .\test.ps1
A
B
嘿嘿嘿,C被我跳过啦!
D
综上,在ForEach-Object cmdlet的PROCESS代码块中使用return,脚本的行为类似于在for循环语句中的continue关键字。
PowerShell中不止有ForEach-Object这个cmdlet,还有foreach关键字,foreach作为关键字,行为和for是完全一样的,想达到提前进入下个循环项的目的,只能使用continue。代码如下:
"A", "B", "C", "D" | ForEach-Object {
if ($_ -eq "C") {
Write-Host "嘿嘿嘿,C被我跳过啦!"
return
}