Die folgenden Code-Segmente geben true aus:
%Vor%Da $ false und "" unterschiedliche Datentypen sind, sollte es nicht automatisch gleich falsch sein?
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
.
Tags und Links powershell