Powershell中字符串比较的奇怪行为

考虑以下功能:

function myfunc()
{
  if (condition1) {
    return 'nowork'
  } elseif (condition2) {
    return $false
  } elseif (condition3) {
    return $true
}

现在,如果我调用此函数,并且知道condition3为true,则可以看到返回了True:

...
$result = myfunc
Write-Host $result

(这将True写入控制台。)

调用函数中的下一条语句是if语句,用于确定返回的内容并对其进行操作:

$result = myfunc
Write-Host $result
if ($result -eq 'nowork') {
  do this..
} elseif ($result -eq $false) {
  do that..
} elseif ($result = $true) {
  do something else..
}

这就是(对我而言)奇怪的地方。即使我看到返回的是True,if语句还是决定执行“做此..”(即if语句的第一个分支),我希望在该处执行“其他操作。”。 另一个奇怪的事情是,它有时起作用,有时却不起作用。我尝试将if语句更改为:

if ('nowork' -eq $result)

然后首先出了问题,现在起作用了,但后来又出现了同样的问题。

我猜我的第一个字符串比较有问题,但是我不知道是什么。我习惯于在Linux(bash)中编写脚本,因此Powershell的行为必须有所不同。

顺便说一句:脚本在Debian 10,Powershell 7中运行,但是在具有Powershell 5.0的Windows计算机上也出现了完全相同的问题。

请帮忙..

评论