2016-06-23 4 views
4
PS C:\> $true -contains "Lies" 
True 

...?PowerShell:真実にはなぜ嘘が含まれていますか?

help about_operators

比較演算子は、試験値が基準セットに表示されるかどうかを決定する(-notinにおいて、 -contains、-notcontains)封じ込め演算子を含む言います。

$trueそれがどのように「基準セット」ことと含まれてい...すべてで何かをすることができ、コンテナタイプではないのですか?それは虚偽のものを含んでいません。

同様

$null -in $nullそれはと同等ですので

+0

良い質問ですが、「コンテナ[タイプ]」という曖昧な用語を避けてください。 PowerShellが単一のエンティティとして扱われる複数の項目に一般的に使用される用語は、_collections_です(_this_インスタンスでは珍しい用語_reference set_が使用されていても、すべての 'about_ *'トピック( 'Get-Help -Category HelpFile |?{Get-Help -Full $ _。Name | Select-String -Quiet '\ breference \ s + set \ b'} '))。 – mklement0

答えて

7

$trueは、1つの要素の集合に変換し得る真である:だから、コレクション内の各要素は「嘘」に比べて取得します

# ~> @($true) -contains "Lies" 
True 

# ~> $true -eq "Lies" 
True 

実際の質問は、上記の式は真と評価されます。何が起こっているのは、左側のタイプに合わせて、oeprationの右側に変換されていることである。

# ~> $true -eq [Bool]"Lies" 
True 

理由:

:あなたが操作を交換するので、場合

# ~> [Bool]"Lies" 
True 

# ~> "Lies" -eq $true 
False 

理由:

# ~> [String]$true 
True 

同様に、$null -in $null$null -in @($null)と同じで、$null -eq $nullが真です。

+0

"* $ trueは1要素のコンテナに変換されます*" - 魔法の変換が再びポップアップします。素晴らしい答え、ありがとう。 – TessellatingHeckler

+0

(私は '$ true [0] -contains" True "[ - 1]'を私の "難読化されたPowerShell"プランに追加できます:P) – TessellatingHeckler

関連する問題