8

PowerShell の about_Comparison_Operators のヘルプ セクションを見ると、次のことがわかります。

PS C:\> $false,$false -eq $true
PS C:\> 

左から右に一致するものはないため、 . でさえも何も返されません$null

私はこれを理解していません:

PS C:\> $true -eq $false,$false
True
PS C:\> 

それは最初にFalse$true -eq $falseを返すものを実行し、次にそのFalseを取り、Trueを返すものを実行しているためですか?$false -eq $false

より詳しい情報

以下が false を返す理由は、文字列を配列と比較しているためですよね? 文字列は配列と等しくありません。

PS C:\> "abc" -eq "abc","def"
False

答え?

さらに掘り下げる$trueと、オブジェクトに等しいことが示されます。

PS C:\> $true -eq [array]
True
PS C:\> $true -eq [string]
True
PS C:\> $true -eq [int]
True
PS C:\> $true -eq [bool]
True

重要なのは、それらのオブジェクトの値です。

PS C:\> $true -eq [int]0
False
4

3 に答える 3

7

このような言語の動作と機能に関する基本的な質問が好きです... PowerShell 言語仕様を読む口実をください。

上記の仕様をダウンロードできます: 2.0および3.0。セクション 7.8.1 - 等価演算子と関係演算子を参照してください。

質問の最初の部分では、実際に何かが返されます。空の配列です。これは次のように示されています。($false,$false -eq $true).psbase

Length         : 0
LongLength     : 0
Rank           : 1
SyncRoot       : {}
IsReadOnly     : False
IsFixedSize    : True
IsSynchronized : False
Count          : 0

スペックより~

左オペランドで指定された値がコレクションでない場合、結果は bool 型になります。それ以外の場合、結果は、右側のオペランドで指定された値と比較したときに True をテストするコレクションの要素を含む、空の制約のない 1 次元配列になる可能性があります。

2番目の部分については、左オペランド自体がboolなので、常に結果になると思います。これは、右側のオペランドがコレクションの場合のみです。

いくつかの例:

$true -eq 1,2,3,4
$true -eq '','','',''
$true -eq '',1,$true,$false
$true -eq $null,$false,1,''

これらはすべて戻り$trueます。逆にこれらはすべて戻ります$false

$false -eq 1,2,3,4
$false -eq '','','',''
$false -eq '',1,$true,$false
$false -eq $null,$false,1,''
$false -eq $true,$true,$true

左オペランドの型は非常に重要です。これは : を返し$trueます。$false -eq 0これは、右側のオペランドが左側のオペランドの型にキャストできるためです。

于 2013-04-09T22:14:28.530 に答える