提问人:050 提问时间:9/27/2023 更新时间:10/13/2023 访问量:48
使用$null和括号进行比较和逻辑运算
Comparison and logical operations with $null and brackets
问:
今天我在控制台上遇到了一个奇怪的东西。例如,我有:
$test = "test"
$null -eq $test
显然,这将返回 False。但是,如果我们通过:
-not {$null -eq $test}
这也返回 False!
我认为卷曲的括号 {} - 我记得的代码块 - 与正常的代码块 () 交互。但我不明白为什么我会得到这样的回报。powershell 如何解决卷曲括号内的代码的比较和逻辑操作?
答:
1赞
Minkulai
10/13/2023
#1
在 PowerShell 中,大括号“{}”的使用可以用于不同的目的,并且它们不能与括号“()”互换。
大括号通常用于脚本块和脚本块表达式,它们在比较和逻辑运算中使用时具有特定的行为。
-not {$null -eq $test}
您正在创建一个脚本块,然后用 -not 否定它。脚本块的结果不会直接计算为布尔值,这就是获得 False 的原因。
-not ($null -eq $test)
这将正确地否定比较的结果,你将得到 True。
因此,若要在逻辑运算中实现预期行为,请使用括号 () 对要否定的表达式进行分组。这将返回 True,因为您否定了比较的结果。
评论
[ScriptBlock]
$True
[Bool]{$null -eq $test}
$True
[Bool]'Test'
-not (& {$null -eq $test})
-->True