!
在PowerShell中代表逻辑非运算符。
以下是一个列出所有特殊字符及其含义的网站。
$string = blah
!$String
(返回 $false)
!
在PowerShell中代表逻辑非运算符。
以下是一个列出所有特殊字符及其含义的网站。
$string = blah
!$String
PowerShell使用!
字符作为逻辑-not
运算符的别名:
$true
!$true
$false
!$false
True
False
False
True
PowerShell将一切为空、$Null或0的内容解释为布尔值$False。布尔值只能是$True或$False。
通过将值转换为布尔值,您可以看到PowerShell为每个值解释了什么:
[bool]0 # False
[bool]1 # True
[bool]"" # False
[bool]"test" # True
[bool]$null # False
!$True # Is $False
!$False # Is $True
![bool]0 # True
![bool]1 # False
![bool]"" # True
![bool]"test" # False
![bool]$null # True
$string = blah
!$String # $String is not $Null or Empty so it is $True
# But the !(NOT) operation turns it to $False
编程语言中的条件语句和循环只能处理布尔值。
因此,当获取用户输入时,您可以使用它来检查用户是否输入了文本,并做出相应的反应:
$UserName = Read-Host -Prompt "Whats your Name Sir?"
If ($UserName) {
Write-Output "Happy Birthday $UserName"
}
Else {
Write-Output "I can't congratulate you as I don't know your name :("
}
!
是-not
运算符的简写(意为“不相等”)。$a = $null;
if(!$a) {
Write-Host '$a is null'
}
$a is null
!
是 -Not
的别名,后者是一元(单参数)运算符,它将其参数转换为布尔值,然后返回该值的逻辑相反值。(大多数情况下,为了可读性,请拼写出 -Not
。)Bool
,两个值分别写成 $True
和 $False
。 -Not
/!
运算符只是将值翻转为相反值:-Not $True
是 $False
,! $False
是 $True
。-And
和 -Or
)应用于非布尔值;这些值在进行操作之前会自动转换为 Bool
,就好像您在它们前面放置了一个 [Bool]
一样。$True
的值称为“truthy”值;变为 $False
的值称为“falsy”值(有时拼写为“falsey”)。不同的编程语言对每个类别中的内容有不同的惯例;例如,空数组在 Perl 和 Python 中为 falsy,但在 Ruby 中为 truthy。$Null
和空字符串都是 falsy。因此,在您的代码示例中,如果字符串为 null 或为空,则 !$String
将为 true(因为它会被 boolify 为 false,然后被 !
翻转为 true)。这样的表达式可能会出现在将变量设置为默认值的 If
语句中,如果先前的代码没有将其设置为其他值。$Null
,PowerShell 中的其他 falsy 值包括数字 0 和空数组。但是,空 HashTable 是 truthy。您可以通过将值转换为布尔值来查看这些对应关系,使用 [Bool]
或快捷方式 !!
。(!
将值转换为布尔值,然后翻转它;第二个 !
再次翻转它。我建议在提示符下使用 !!
进行更快的输入,但在生产代码中拼写出 [Bool]
进行更好的自我记录。)以下是一些示例:PS /> [Bool]$Null
False
PS /> !!''
False
PS /> !!0
False
PS /> !!@()
False
PS /> !!@{}
True