Powershell 函数未按预期执行
Powershell function not executing as expected
我有以下函数显示 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)
我可以看到调用了函数,但迭代似乎没有发生...我做错了什么?
几件事,
首先,powershell 中的函数不是使用 ()
调用的,您可以将函数调用为
AnyOf $str $a
标准约定是$<<nameOfFunction>> <<param1>> <<param2>>
其次,您的输出在 $res
中被捕获,因此不会打印到屏幕上,如果您在 main function
的末尾添加 $res
,它将输出。
所以你的主要功能变成了:
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
这些实际上成为输出流的一部分,这可能不是您想要的,因为它可能导致意外行为。
我有以下函数显示 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)
我可以看到调用了函数,但迭代似乎没有发生...我做错了什么?
几件事,
首先,powershell 中的函数不是使用 ()
调用的,您可以将函数调用为
AnyOf $str $a
标准约定是$<<nameOfFunction>> <<param1>> <<param2>>
其次,您的输出在 $res
中被捕获,因此不会打印到屏幕上,如果您在 main function
的末尾添加 $res
,它将输出。
所以你的主要功能变成了:
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
这些实际上成为输出流的一部分,这可能不是您想要的,因为它可能导致意外行为。