【问题标题】:Powershell conditionals return non bool resultsPowershell 条件返回非布尔结果
【发布时间】:2017-07-21 12:47:26
【问题描述】:

我希望结果是 bool $true 或 $false

$testlist = @("red","orange","green")
$testlist -eq "green"

这应该会导致 $True,但结果却是“绿色”

对比

$testlist -ne "green" 

以字符串形式返回除“green”之外的其他值

查找您要查找的值的简洁功能,但对于实际的条件返回无用,因为它每次都会导致 $True,因为它是一个非零长度值。

【问题讨论】:

  • 感谢您的回答。条件运算符返回数组的概念很奇怪。

标签: string windows powershell


【解决方案1】:

你应该测试一个值是否在数组中:

$testlist -contains "green"

【讨论】:

  • 您好,谢谢。我实际上是在使用对象而不是字符串,因为我试图使用简化的代码来说明一个概念。但我想我找到了一种解决方法,结果实际上并不是 get-member 所指示的字符串,它实际上是一个数组,并且可以这样操作。
  • 你应该测试一个值是否在数组中:这就是-eq实际上正在做的事情。
【解决方案2】:

我希望结果是布尔值 $true$false

您正在运行的代码可以被评估为布尔值,您仍然会得到相同的结果。几乎和非零整数和非空字符串将被转换为布尔值。

PS C:\Users\Matt> $testlist = @("red","orange","green")
[bool]($testlist -eq "green")
True

-eq 和许多其他运算符(如 -match)使用数组和标量值。

虽然它隐藏了幕后发生的事情,但它可以作为if 语句工作。

if($testlist -eq "green"){"Green is in there"}

不确定这是否发生在您身上,但您的代码的评估方式是 PowerShell 返回满足查询的所有数组成员。将此作为另一个示例:

PS C:\Users\Cameron> $testlist = @("red","orange","green","green")
$testlist -eq "green"
green
green

你看到它返回了两次绿色,因为它两次在数组中。

4c74356b41's answer 使用 -contains 数组运算符,它通过设计返回布尔值。如果您至少有 v3,您还可以使用更直观的 -in,它的工作方式几乎相同。

"green" -in "red","orange","green"

我只是想确定你知道发生了什么,并且通常有一种方法可以解决 PowerShell 的疯狂

【讨论】:

  • 转换为 bool 非常聪明,我喜欢它;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 1970-01-01
  • 2018-01-08
相关资源
最近更新 更多