当前位置: 首页 > 知识库问答 >
问题:

为什么给变量赋值为true,它将不会计算为true?

周峻
2023-03-14
$test = true
if($test) {
  Write-Output "true"
} else {
  Write-Output "false"
}

输出为“假”,但为什么?我将<code>truetruevs$true什么时候合适?

编辑:一些用户提到我应该看到错误,但我没有。我在PowerShell 2.0(Windows 7)和PowerShell 4.0(Windows 8.1)中都尝试过。truefalse确实像我说的那样更改了COM属性。

编辑:事实证明,我们将< code>true赋给了COM属性,但它们实际上收到了false。我们的路径中有gnuwin32程序,其中两个程序是真的和假的:

C:\gnuwin32\bin\true.EXE
C:\gnuwin32\bin\false.EXE

所以在那些计算机上,类似于< code>$x = true的东西运行命令< code>C:\gnuwin32\bin\true。EXE没有输出,并且< code>$x为空。从来没有人发现这一点,即com属性应该设置为true,但实际上并没有这样设置。

标记为正确的答案解释了“真实性”,并且该值实际上是一个空值,这有助于我弄清楚它。

共有3个答案

夹谷沛
2023-03-14

Unix的“真”和“假”命令不同于$true和$false。unix的只设置退出代码,但没有给出任何输出。强脉冲变量提供布尔输出。以下是测试上一个命令的退出代码的解决方法:

$test = $(true.exe; $?) # $test gets set to boolean True
if($test) {
  Write-Output "true"
} else {
  Write-Output "false"
}
鲁浩渺
2023-03-14

您的第一行<code>$test=true

true : The term 'true' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:9
+ $test = true
+         ~~~~
    + CategoryInfo          : ObjectNotFound: (true:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

如果您不想让< code>$test成为一个值为1 (true)的布尔值,那么您必须像这样对它赋值:< code>$test = $true。

为什么输出是‘假’的?

如前所述,$test=true将引发异常,因此$test未声明/定义。我建议您将$ErrorActionPreection设置为继续或停止以捕获这些类型的错误。

巫马翰翮
2023-03-14

由于问题是为什么会发生这种情况,让我在回答中深入探讨一下细节

if($test)检查名为truthy的东西。基本上,它将表达式的结果转换为布尔值,然后检查它是真还是假。你可以在这个答案中了解更多。

在你的情况下,正如Martin Brandl在他的有用答案中提到的,尝试分配$test=true will(在大多数情况下)会导致异常,但代码继续被执行。

注意:粗体语句并不总是正确的,因为它取决于$ErrorActionPreferrence,但在您的情况下,它是正确的,因为您提到您收到了输出。

赋值失败后,$test的值为$null-您可以通过以下方式进行检查:

$test -eq $null

$null是falsey值,因此if()中的表达式计算结果为$false并且执行else关键字之后的代码,因此输出中的False

 类似资料:
  • 问题内容: 在这段代码中,最后,我为c1分配了一个值,但是当我打印它时,我在所有c1字段中都得到了null。我为Cliente类写下了代码。我想打印我给c1的所有值,但我不知道为什么在所有字段中都打印null。我使用调试器遵循代码,直到将所有值分配给新变量的语句为止,一切都正确。 问题答案: 你应该改变这个 至 您正在为方法参数而不是字段分配值。同样适用于构造函数中的所有参数。

  • 对于大学评估,我必须使用一个名为sc的扫描器,具有班级范围,整个课程必须包含在一个班级中。main方法调用方法,该方法使用Scanner和for循环调用两种方法之一以响应用户输入。 这两种方法之一使用扫描仪来计算输入整数的阶乘。执行该方法后, 中的 for 循环将继续。为了避免由于用户输入浮点数而导致的输入不匹配异常,我使用了try/catch。但是,当程序返回到 for 循环时,扫描程序在会导致

  • 问题内容: 我一直在使用IIFE中和,并一直在使用的结构如下: 方法1: 但是,我经常看到以下情况,其中将变量分配给 方法2: 注意: 此问题 不是 关于此模式是什么或IIFE是什么。这与为什么要 在IIFE上 使用返回变量及其与Angular实践的关系有关。 在Angular方法1中工作正常,但是在我看到的许多原始JS示例中,都使用了方法2。我的假设是,封装在其中的任何内容都可以通过它进行调用。

  • 问题内容: 为什么此代码无法编译? 为什么我不能将类变量传递给? 问题答案: 该操作符对引用类型,像,而不是对象,如。您可能想要类似 旁注:如果编写,您的代码将更加简洁 但是,我不确定是否需要某种方法。

  • 我试图理解Java10中的局部变量类型推断。 > 下面的代码在编译和运行时都能完美地工作: