我有以下功能,可以显示array
中是否包含string
中的任何字词:
function AnyOf ([string] $line, [string[]] $list)
{
Write-Output "AnyOf!"
foreach($item in $list)
{
if($line.Contains($item))
{
Write-Output "Found: $item"
return $true
}
}
return $false
}
这是为了测试它:
function main
{
[string[]]$a = @("user1", "user2")
$str = "user1 and user2"
$res = AnyOf($str, $a)
}
我希望它能看到user1
和user2
打印出来但没有打印出来。似乎函数没有被调用,因为永远不会执行Write-Output "AnyOf!"
。
然而,当我执行:
AnyOf($str, $a)
而不是:
$res = AnyOf($str, $a)
我可以看到函数被调用但迭代似乎没有发生......我做错了什么?
答案 0 :(得分:4)
一些事情,
首先,不使用()
来调用powershell中的函数,将函数称为
AnyOf $str $a
标准惯例是$<<nameOfFunction>> <<param1>> <<param2>>
其次,您的输出正在$res
中捕获,因此如果您在$res
的末尾添加main function
,则不会将其输出到屏幕上。
所以你的主要功能变成了:
function main
{
[string[]]$a = @("user1", "user2")
$str = "user1 and user2"
$res = $AnyOf $str $a
$res #or just don't assign it to $res..
}
#to call main:
main
Output:
AnyOf!
Found: user1
True
正如您在上面的输出中所看到的,它永远不会找到User2
,因为一旦找到匹配项就会使用return $true
,退出该函数。
另外需要注意的是,当您return $false
或$true
这些实际上成为输出流的一部分时,可能不是您想要的,因为它可能会导致意外行为。