我有一个函数,当遇到关键字 时似乎不会退出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
错误,或者我遗漏了语法的某些部分?我不知所措。
答案1
ForEach-Object
采取脚本块,这有点像一个函数。Return
仅退出脚本块的当前调用,而不是外部函数,因此ForEach-Object
仍在继续,并将使用下一个项目再次调用脚本块。
让循环退出函数的最简单方法是使用循环ForEach
,它不会将括号块语法解释为脚本块:
ForEach ($_ In $photoSideArr) {
# Do something with $_
# "Return" in here will exit the enclosing function
}