2017-07-27 5 views
1

現在PowerShellの文字列と比較していますが、-eqを-containsではなく誤って使用しましたが、期待どおりの結果が得られました。PowerShell Substiture -eq for-forは文字列と配列を比較するときに使用します

コード例:

$arr = "Fred","Bob" 
if($arr -eq "Bob") 
    { 
    Return $true 
    } 
    Else 
    { 
    Return $false 
    } 

すなわち上記からの出力が文字列「フレッド」を比較したが、「スティーブ」は$の偽になりますと比較しますと、真$されます。私が-containsを使うと同じことが起こります。

PowerShellは「助けてくれました」と思われ、-eqを-containsにしました。この仮定は正しいですか?

第2に、他の言語(私の知る限り)がそうでない場合、PowerShellがこれを行う理由はありますか?

乾杯、

ピート

P.S.同様に、-containsを使用して文字列を別の文字列と比較すると、2つの文字列が完全に一致する場合にのみ$ trueが返されます。

+2

[演算子への入力がスカラー値の場合、比較演算子はブール値を返します。入力が値のコレクションである場合、比較演算子は一致する値を返します。](https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell.core/about/about_comparison_operators) – PetSerAl

答えて

6

このコードを見てください。オペレータへの入力がスカラー値である場合

$arr = "Fred", "Bob" 
$arr -eq "Bob" # Bob 

the docsの関連部分は

で、比較演算子は、ブール値を返します。入力が値のコレクションである場合、比較演算子は一致する値を返します。

この場合、入力は値の集合です。しかし、入力(左辺)がスカラー値 'Bob'になるように、以前の式を回すと、全く別のものが得られます。

'Bob' -eq $arr # False 
+1

'if'条件が空でないときには' $ true'を返すことに注意することが重要です。したがって、if( "Bob"){$ true} else {$ false}は '$ true'を返し、' if( ''){else}は$ falseを返します。これは '-eq'比較演算子と' if'文の振る舞いを組み合わせたものであり、これは質問者が見ているものを引き起こします。 – BenH

+1

Thanks @ mike-sherrill-cat-recall(と@PetSerAl)...私は考えることができるすべてを探せましたが、RTFMを忘れてしまった:-) –

+0

そして明確化のために@BenHに感謝し、 Bobは$ trueを返します。私は今、幸せで、ちょっと混乱しています。チャップ:-) –

関連する問題