Булевы литералы в PowerShell

151

Какие логические литералы в PowerShell?

Полковник паника
источник
23
Это хороший вопрос, и он получил отклик от меня. Я всегда поддерживаю ТАК вопросы, которые появляются в моих поисках Google и действительно помогают мне. Эти 4 даунвотера должны по-настоящему переосмыслить свое отношение к простым вопросам начального уровня, подобным этому.
Улидько

Ответы:

172

$trueи $false.

Это постоянные, хотя. Нет литералов уровня языка для логических значений.

В зависимости от того, где они необходимы, вы можете также использовать что - нибудь , что принуждает к логическому значению, если тип должен быть логическое значение, например , в вызовах методов , которые требуют булевых (и не имеют противоречивые перегрузок) или условные оператор. Например, большинство ненулевых объектов имеют значение true. nullпустые строки, пустые массивы и число 0ложно.

детеныш
источник
18

[bool]1а [bool]0также работает.

Полковник паника
источник
3
Чтобы быть точным, вы можете использовать множество вещей, которые можно привести к логическому в контекстах, где происходит преобразование, например, в условном выражении. И в тех случаях вам вообще не нужно кастовать. if ($s.Length) { ... }прекрасно, например.
Джо
5

Чтобы добавить больше информации к уже существующим ответам : логические литералы, $trueа $falseтакже работают как есть, когда используются в качестве параметров командной строки для сценариев PowerShell (PS). Для приведенного ниже сценария PS, который хранится в файле с именем installmyapp.ps1:

param (
    [bool]$cleanuprequired
)

echo "Batch file starting execution."

Теперь, если мне нужно вызвать этот файл PS из командной строки PS, вот как я могу это сделать:

installmyapp.ps1 -cleanuprequired $true

ИЛИ

installmyapp.ps1 -cleanuprequired 1

Здесь 1и $trueэквивалентны. Также 0и $falseэквивалентны.

Примечание . Никогда не ожидайте, что строковый литерал trueможет быть автоматически преобразован в логический. Например, если я запускаю следующую команду:

installmyapp.ps1 -cleanuprequired true

он не может выполнить скрипт с ошибкой ниже:

Невозможно обработать преобразование аргумента для параметра 'cleanuprequired'. Невозможно преобразовать значение "System.String" в тип "System.Boolean". Логические параметры принимают только логические значения и числа, такие как $ True, $ False, 1 или 0.

RBT
источник