2016-03-22 17 views
0

I持ってarray内の単語のいずれかがstringに含まれている場合を示し、次の機能:PowerShellの機能は期待通りに実行していない

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) 
} 

私はuser1user2の両方が印刷されることを期待しますが、何も印刷されません。 Write-Output "AnyOf!"は決して実行されないので、関数が呼び出されていないかのように見えます。

しかし、私は実行すると:

AnyOf($str, $a) 

の代わりに:

$res = AnyOf($str, $a) 

を私は何を...私は関数が呼び出されることがわかりますが、反復が起きていないようです間違っている? 、PowerShellの機能を使用すると、標準的な慣習は、第二$<<nameOfFunction>> <<param1>> <<param2>>

ある

AnyOf $str $a

としての機能を呼び出します()を使用して呼び出されていないすべての

答えて

4

いくつかのこと、

まず、あなたの出力は$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 

あなたは上記の出力で見ることができるように、それは、関数の外に出て行く、一致を見つけたら、あなたはreturn $trueを使用しているため、それはUser2を見つけることはありません。

return $falseまたは$trueが実際に出力ストリームの一部になってしまい、予期しない動作につながる可能性があります。

関連する問題