PowerShell中的特殊字符"!"代表什么?

6

!在PowerShell中代表逻辑非运算符。

以下是一个列出所有特殊字符及其含义的网站。

$string = blah
!$String

(返回 $false)
4个回答

14

PowerShell使用!字符作为逻辑-not运算符的别名:

$true
!$true
$false
!$false

True
False
False
True

5

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 :("
}

4
在PowerShell中,感叹号 ! -not运算符的简写(意为“不相等”)。
例如:
$a = $null;
if(!$a) {
    Write-Host '$a is null'
}

输出.

$a is null

1
符号 !-Not 的别名,后者是一元(单参数)运算符,它将其参数转换为布尔值,然后返回该值的逻辑相反值。(大多数情况下,为了可读性,请拼写出 -Not。)
布尔是一种数据类型,只有两个可能的值:true 和 false。在 PowerShell 中,该类型称为 Bool,两个值分别写成 $True$False-Not/! 运算符只是将值翻转为相反值:-Not $True$False! $False$True
但在 PowerShell 中,就像许多其他编程语言一样,您可以将布尔运算符(也包括 -And-Or)应用于非布尔值;这些值在进行操作之前会自动转换为 Bool,就好像您在它们前面放置了一个 [Bool] 一样。
当被这样转换时变为 $True 的值称为“truthy”值;变为 $False 的值称为“falsy”值(有时拼写为“falsey”)。不同的编程语言对每个类别中的内容有不同的惯例;例如,空数组在 Perl 和 Python 中为 falsy,但在 Ruby 中为 truthy。
在 PowerShell 中,null 值 $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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接