Literały logiczne w programie PowerShell

151

Jakie są literały logiczne w programie PowerShell?

Colonel Panic
źródło
23
To dobre pytanie i otrzymałem ode mnie pozytywną opinię. Zawsze głosuję na pytania SO, które pojawiają się w moich wyszukiwaniach w Google i pomagają mi. Ci 4 przeciwnicy powinni naprawdę przemyśleć swoje podejście do prostych pytań na poziomie podstawowym, takich jak to.
ulidtko

Odpowiedzi:

172

$truei $false.

To są jednak stałe. Nie ma literałów na poziomie języka dla wartości logicznych.

W zależności od tego, gdzie ich potrzebujesz, możesz również użyć wszystkiego, co wymusza na wartości logicznej, jeśli typ ma być logiczny, np. W wywołaniach metod, które wymagają wartości logicznej (i nie mają sprzecznego przeciążenia), lub instrukcji warunkowych. Na przykład większość obiektów niezerowych jest prawdą. null, puste łańcuchy, puste tablice i liczba 0są fałszywe.

Joey
źródło
18

[bool]1i [bool]0też działa.

Colonel Panic
źródło
3
Aby być precyzyjnym, możesz użyć wielu rzeczy, które można wymusić na wartości logiczne w kontekstach, w których zachodzi konwersja, np. W instrukcji warunkowej. W takich przypadkach w ogóle nie musisz rzucać. if ($s.Length) { ... }jest na przykład w porządku.
Joey
5

Aby dodać więcej informacji do już istniejących odpowiedzi : Literały logiczne, $truea $falsetakże działają tak, jak są, gdy są używane jako parametry wiersza polecenia dla skryptów PowerShell (PS). Dla poniższego skryptu PS, który jest przechowywany w pliku o nazwie installmyapp.ps1:

param (
    [bool]$cleanuprequired
)

echo "Batch file starting execution."

Teraz, jeśli mam wywołać ten plik PS z wiersza poleceń PS, mogę to zrobić w następujący sposób:

installmyapp.ps1 -cleanuprequired $true

LUB

installmyapp.ps1 -cleanuprequired 1

Tutaj 1i $truesą równoważne. Również 0i $falsesą równoważne.

Uwaga : Nigdy nie spodziewaj się, że literał ciągu truemoże zostać automatycznie przekonwertowany na wartość logiczną. Na przykład, jeśli uruchomię poniższe polecenie:

installmyapp.ps1 -cleanuprequired true

nie wykonuje skryptu z następującym błędem:

Nie można przetworzyć transformacji argumentów w parametrze „cleanuprequired”. Nie można przekonwertować wartości „System.String” na typ „System.Boolean”. Parametry logiczne akceptują tylko wartości i liczby logiczne, takie jak $ True, $ False, 1 lub 0.

RBT
źródło