2016-09-29 1 views
1

私はこれをしばらく理解しようとしていましたが、この2つの違いを理解できないようです。具体的には、違い、彼らはデータの配列に関係するとして:もしあれば

PS C:>$myarray = "a", "ab", "abc" 
PS C:>$myarray -match "b" 
ab 
abc 
PS C:>$myarray | where {$_ -match "b"} 
ab 
abc 

は誰もが、私は何を理解することができ、違いは、これら2つのオプションをしていますか?

ありがとうございます!

答えて

3

少なくとも結果はありません。 1つは配列に比較演算子を適用する場合(つまり、各配列要素に適用され、それが返される部分が$trueを返す場合)です。もう1つは、フィルタリングを行うコマンドレットに配列を渡すことです。結果は同じです。

あなたは創造的な取得し、さらに別の方法で同じことを解決することができます。左側のオペランドが配列ないとき

$myarray | foreach { if ($_ -match 'b') { $_ } } 

注しかし、ことは、結果が異なります。

PS Home:\> ,'b' -match 'b' 
b 
PS Home:\> 'b' -match 'b' 
True 

変数が配列かどうかわからない場合は、次のように強制してください:

@($foo) -match 'b' 

または正しいことをするWhere-Objectを使用してください。


個人的に私はコンソールにPowerShellコードを書き込むときに、直接演算子を使用する傾向があります。

(gc file) -match 'regex' 

しかし、必要なスクリプトを書くとき、私はWhere-Objectで「正しい」方法を使用します(私は実際にも、より頻繁にSelect-Stringを使用して開始する必要があります。):それだけでなく、素敵な簡潔なgrep同等になり頑強であるか、または他の人が読書/維持しなければならない。

+0

完全にああを行うことができます使用され、私は結果が常に同じになるように見えたが、私はいくつかの詳細や特徴点があることがなかったことを確認したいと言うことができますそれらを使用時に区別しました。 おかげで(特に編集のために)、それは私のために物事をクリア! –

+0

ちょうど私の2セント、私は 'Select-String'が非常に速いことを発見しました。 – sodawillow

+0

@sodawillow好奇心、このようなもののために 'Select-String'を利用するにはどうすればいいですか?私はそれについて少し読んだが、私はそれが何をしているのかよく分からない。 –

2
  • $array -match 'value' - 直接
  • $array | where { $_ -match 'value' }(大きな配列に特に顕著で)非常に高速であり、各値の文字列表現をチェックする - したがって、各項目のスクリプトブロックを実行する:
    • 呼び出しオーバーヘッド(目立ちます大規模な配列では多くの処理を遅くすることがあります)
    • 柔軟性と複雑な条件
    • 余分なアクションが
+0

これはまた非常に有用です、おかげで束! –