我有一个函数,当它遇到关键字时似乎不会退出return
。相反,它继续执行该功能。这是函数的相关片段:
function Do-Something($photoNum,$photoLabelArrUniq) {
...
$fileLabelArrUniq=(Get-ChildItem -filter "$photoNum *.tif").name.substring(4,14) | sort-object | get-unique
$photoSideArr=@()
$photoSideArr=($fileLabelArrUniq.substring(0,1))
write-host "photoSideArr: $photoSideArr"
$a=3
$photoSideArr | Foreach-Object {
if ($_ -eq "B") {
write-host "return: $fileLabelArrUniq"
write-host "Hello There"
$a=4
return $fileLabelArrUniq
}
}
write-host "a: $a"
...
return $something
}
结果是:
photoSideArr: B F F
return: B OR 06K24b 07 F CC 06K24b 07 F OR 06K24b 07 #This is an array with 3 members: "B OR 06K24b 07","F CC 06K24b 07","F OR 06K24b 07"
Hello There
a: 4
和表示它在条件块中,因此应该返回return: B OR 06K24b 07 F CC 06K24b 07 F OR 06K24b 07
然后退出函数。然而,正如结果所证明的(只有在块中包含关键字时才会发生),该函数在它应该向主脚本返回结果并退出后继续。Hello There
if
$fileLabelArrUniq
a: 4
if
return
我对return
脚本中函数的理解是错误的还是我遗漏了一些语法?我很茫然。
ForEach-Object
接受一个脚本块,这有点像一个函数。Return
仅退出脚本块的当前调用,而不是外部函数,因此ForEach-Object
仍在继续并将使用下一项再次调用脚本块。让循环退出函数的最简单方法是使用循环
ForEach
,它不会将花括号语法解释为脚本块: