What are the Boolean literals in PowerShell?
3 Answers
$true and $false.
Those are constants, though. There are no language-level literals for Booleans.
Depending on where you need them, you can also use anything that coerces to a Boolean value, if the type has to be Boolean, e.g., in method calls that require Boolean (and have no conflicting overload), or conditional statements. Most non-null objects are true, for example. null, empty strings, empty arrays and the number 0 are false.
2 Comments
$true, True, and true. Eg, 7 -eq 7 yields True (not $True). Azure commands, such as az group exists -n "MyResourceGroup" yields true (note lower case). What is going on? Why so inconsistent? All of these -- $true, True, and true -- are equal to $true when performing True -eq $true, etc.True/False is simply the string representation of a boolean. true should never appear in PowerShell; it's the C# literal for a boolean. In your Azure example I'd guess it's a string returned from an API. $true is effectively the PowerShell "literal" (technically a constant variable) for a boolean. Coercion is common for dynamic languages that allow a range of conditions to be simplified; look at JavaScript and others. It's simply a direction of language design, not merely a mistake.[bool]1 and [bool]0 also works.
2 Comments
if ($s.Length) { ... } is perfectly fine, for example.New-Object -Type Boolean for false and ! (New-Object -Type Boolean) for trueTo add more information to already existing answers: The Boolean literals $true and $false also work as is when used as command line parameters for PowerShell scripts. For the below PowerShell script which is stored in a file named installmyapp.ps1:
param (
[bool]$cleanuprequired
)
echo "Batch file starting execution."
Now if I've to invoke this PowerShell file from a PowerShell command line, this is how I can do it:
installmyapp.ps1 -cleanuprequired $true
OR
installmyapp.ps1 -cleanuprequired 1
Here 1 and $true are equivalent. Also, 0 and $false are equivalent.
Note: Never expect that string literal true can get automatically converted to boolean. For example, if I run the below command:
installmyapp.ps1 -cleanuprequired true
it fails to execute the script with the below error:
Cannot process argument transformation on parameter 'cleanuprequired'. Cannot convert value "System.String" to type "System.Boolean". Boolean parameters accept only Boolean values and numbers, such as $True, $False, 1 or 0.