powershell - 为什么将 true 分配给变量它不会评估 true?
问题描述
$test = true
if($test) {
Write-Output "true"
} else {
Write-Output "false"
}
输出为“假”,但为什么呢?我将true
和分配false
给 COM 对象属性,它似乎工作正常......我做错了吗?什么时候适合在 PowerShell中使用true
vs ?$true
编辑:一些用户提到我应该看到一个错误,但我没有。我已经尝试过 PowerShell 2.0 (Windows 7) 和 PowerShell 4.0 (Windows 8.1)。并且确实像我说的那样更改 COM 属性true
。false
编辑:事实证明,我们正在分配true
给 COM 属性,但它们实际上收到了错误。我们的路径中有 gnuwin32 程序,其中两个程序是正确的和错误的:
C:\gnuwin32\bin\true.EXE
C:\gnuwin32\bin\false.EXE
因此,在那些计算机上,诸如$x = true
运行C:\gnuwin32\bin\true.EXE
没有输出且$x
为空的命令之类的东西。没有人知道这一点,打算设置为 true 的 com 属性实际上并没有这样设置。
标记为正确的答案解释了“真相”,并且该值实际上是一个空值,这有助于我弄清楚。
解决方案
由于问题是为什么会发生,让我在回答中深入研究细节
if($test)
检查名为truthy的东西。基本上,它将表达式的结果转换为布尔值,然后检查它是真还是假。您可以在该答案中阅读更多相关信息。
在您的情况下,正如Martin Brandl 在他的有用答案中提到的那样,尝试分配$test = true
将(在大多数情况下)导致异常,但代码继续执行。
注意:粗体的陈述并不总是正确的,因为它取决于
$ErrorActionPreferrence
但在您的情况下它是正确的,因为您提到您收到了输出。
赋值失败后,值为$test
-$null
可以通过以下方式查看:
$test -eq $null
$null
是错误值,因此您的表达式if()
计算结果为$false
并执行关键字之后的代码else
,因此False
在您的输出中。
推荐阅读
- reactjs - 自定义 Yup 验证方法不起作用
- javascript - 如何查看页面上的新元素
- sql - 在 1 行中创建相同列的数据透视
- sql - Oracle - 加入逗号分隔的数据
- javascript - 如何修复未捕获的 ReferenceError:未定义缩略图 - 使用以下代码
- python - Seaborn/Matplotlib:在水平条形图上绘制过滤数据
- selenium - 在 Selenium 或 UI.Vision 上使用 cy.clock() 和 cy.tick() 之类的东西
- bash - 在 bash 脚本中使用制表符补全
- git - Git 合并“到”还是合并“到”?
- c++ - C++ 指针与对象