Boolesche Literale in PowerShell

151

Was sind die booleschen Literale in PowerShell?

Oberst Panik
quelle
23
Dies ist eine gute Frage und wurde von mir positiv bewertet. Ich stimme immer SO-Fragen zu, die in meinen Google-Suchen auftauchen, und helfe mir. Diese 4 Downvoter sollten ihre Einstellung zu einfachen Einstiegsfragen wie diesen wirklich überdenken.
Ulidtko

Antworten:

172

$trueund $false.

Das sind jedoch Konstanten. Es gibt keine Literale auf Sprachebene für Boolesche Werte.

Je nachdem, wo Sie sie benötigen, können Sie auch alles verwenden, was zu einem booleschen Wert gezwungen wird, wenn der Typ boolesch sein muss, z. B. in Methodenaufrufen, die boolesche Werte erfordern (und keine widersprüchliche Überladung aufweisen), oder bedingte Anweisungen. Die meisten Nicht-Null-Objekte sind beispielsweise wahr. null, leere Strings, leere Arrays und die Nummer 0sind falsch.

Joey
quelle
18

[bool]1und [bool]0funktioniert auch.

Oberst Panik
quelle
3
Um genau zu sein, können Sie viele Dinge verwenden, die in Kontexten, in denen eine Konvertierung stattfindet, zum Booleschen Wert gezwungen werden können, z. B. in einer bedingten Anweisung. Und in diesen Fällen müssen Sie überhaupt nicht wirken. if ($s.Length) { ... }ist zum Beispiel vollkommen in Ordnung.
Joey
5

Um weitere Informationen zu bereits vorhandenen Antworten hinzufügen : Die Boolesche Literale $trueund $falseauch Arbeit wie wenn sie als Befehlszeilenparameter für Powershell (PS) Skripte verwendet. Für das folgende PS-Skript, das in einer Datei mit dem Namen gespeichert ist installmyapp.ps1:

param (
    [bool]$cleanuprequired
)

echo "Batch file starting execution."

Wenn ich diese PS-Datei über eine PS-Befehlszeile aufrufen muss, kann ich dies folgendermaßen tun:

installmyapp.ps1 -cleanuprequired $true

ODER

installmyapp.ps1 -cleanuprequired 1

Hier 1und $truesind gleichwertig. Auch 0und $falsesind gleichwertig.

Hinweis : Erwarten Sie niemals, dass das String-Literal trueautomatisch in einen Booleschen Wert konvertiert werden kann. Zum Beispiel, wenn ich den folgenden Befehl ausführe:

installmyapp.ps1 -cleanuprequired true

Das Skript kann mit dem folgenden Fehler nicht ausgeführt werden:

Argumenttransformation für Parameter 'Bereinigung erforderlich' kann nicht verarbeitet werden. Der Wert "System.String" kann nicht in "System.Boolean" konvertiert werden. Boolesche Parameter akzeptieren nur boolesche Werte und Zahlen, wie z. B. $ True, $ False, 1 oder 0.

RBT
quelle