Powershell:“Return”不是退出函数

Powershell:“Return”不是退出函数

我有一个函数,当遇到关键字 时似乎不会退出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: 4ifreturn

我对脚本中函数的理解是否return错误,或者我遗漏了语法的某些部分?我不知所措。

答案1

ForEach-Object采取脚本块,这有点像一个函数。Return仅退出脚本块的当前调用,而不是外部函数,因此ForEach-Object仍在继续,并将使用下一个项目再次调用脚本块。

让循环退出函数的最简单方法是使用循环ForEach,它不会将括号块语法解释为脚本块:

ForEach ($_ In $photoSideArr) {
    # Do something with $_
    # "Return" in here will exit the enclosing function
}

相关内容