使用$null和括号进行比较和逻辑运算

Comparison and logical operations with $null and brackets

提问人:050 提问时间:9/27/2023 更新时间:10/13/2023 访问量:48

问:

今天我在控制台上遇到了一个奇怪的东西。例如,我有:

$test = "test" 
$null -eq $test

显然,这将返回 False。但是,如果我们通过:

-not {$null -eq $test}

这也返回 False!

我认为卷曲的括号 {} - 我记得的代码块 - 与正常的代码块 () 交互。但我不明白为什么我会得到这样的回报。powershell 如何解决卷曲括号内的代码的比较和逻辑操作?

PowerShell null 活动目录

评论

7赞 iRon 9/27/2023
类型将 (converts) 转换为 (),类似于字符串转换为 ()。请参阅:关于布尔值。您可能想做的是计算表达式:[ScriptBlock]$True[Bool]{$null -eq $test}$True[Bool]'Test'-not (& {$null -eq $test}) --> True

答:

1赞 Minkulai 10/13/2023 #1

在 PowerShell 中,大括号“{}”的使用可以用于不同的目的,并且它们不能与括号“()”互换。
大括号通常用于脚本块和脚本块表达式,它们在比较和逻辑运算中使用时具有特定的行为。

-not {$null -eq $test}
您正在创建一个脚本块,然后用 -not 否定它。脚本块的结果不会直接计算为布尔值,这就是获得 False 的原因。

-not ($null -eq $test)
这将正确地否定比较的结果,你将得到 True。
因此,若要在逻辑运算中实现预期行为,请使用括号 () 对要否定的表达式进行分组。这将返回 True,因为您否定了比较的结果。