Warum ist $ false -eq "" wahr?

7

Die folgenden Code-Segmente geben true aus:

%Vor%

Da $ false und "" unterschiedliche Datentypen sind, sollte es nicht automatisch gleich falsch sein?

    
Backwards_Dave 24.09.2014, 10:52
quelle

1 Antwort

19

Beim Ausführen von Vergleichsoperationen versucht PowerShell automatisch, das Objekt auf der rechten Seite des Operators so zu verwenden, dass es mit dem Typ auf der linken Seite übereinstimmt.

Wenn [string] auf [bool] gezwungen wird, wird jede Nicht-Null-Zeichenfolge als $true ausgewertet, und eine Null-Zeichenfolge wird als $false ausgewertet. Siehe Blogpost Boolesche Werte und Operatoren für weitere Informationen zur automatischen Konvertierung verschiedener Datentypen in boolesche Werte.

Dies führt manchmal zu unerwarteten Ergebnissen:

%Vor%

Der Zeichenfolgenwert von $false ist 'False', was eine Zeichenfolge ungleich null ist und in $true ausgewertet wird, wenn er an [bool] zurückgeworfen wird.

Es macht auch Vergleichsoperationen nicht-kommutativ, wenn die Operanden verschiedene Datentypen haben:

%Vor%

Im ersten Vergleich wird der Wert $false automatisch in eine Zeichenkette umgewandelt, um dem Typ des ersten Operanden ( '' ) zu entsprechen. Sie vergleichen also '' -eq 'False' , was zu% co_de wird %.

Im zweiten Vergleich wird die Zeichenkette $false automatisch in einen booleschen Wert umgewandelt, um dem Typ des ersten Operanden ( '' ) zu entsprechen. Dieses Mal vergleichen Sie also $false , was ergibt $false -eq $false .

    
mjolinor 24.09.2014, 11:14
quelle

Tags und Links