FuncOne() - 和 FuncTwo() 不工作

FuncOne() -and FuncTwo() not working

这是我的代码:

if (FuncOne($valOne) -and FuncTwo($valTwo)) {
    ...
}

当这两个函数的计算结果为 $false 时,if 语句中的代码仍然执行。这是为什么?这也没有按预期工作:

if (FuncOne($valOne) -eq $true -and FuncTwo($valTwo) -eq $true) {
    ...
}

当这样写时,它按预期工作。

$a = FuncOne($valOne)
$b = FuncTwo($valTwo)

if($a -and $b) {
    ...
}

怎么回事?

您实际上需要将函数放在括号中才能调用它:

if ((FuncOne($valOne)) -and (FuncTwo($valTwo))) {
    ...
}

这是语法问题。

在 PowerShell 中调用函数的正确语法不是:

functionName($arg1[,$arg2,$arg3])

而是:

functionName [-parameterName1] $arg1 [[-parameterName2] $arg2]

现在,让我们将其应用于您的 if() 示例表达式:

FuncOne $valOne -and FuncTwo $valTwo 

您会注意到显式参数名称 (-ParameterName) 和运算符 (-and) 完全无法区分 - 解析器无法判断 -and 是否应该被解释为参数名称或运算符。此外,字符串文字 FuncTwo 也可以解释为参数参数,这正是发生的情况。

为了让解析器知道您打算将表达式视为两个单独的表达式,强制计算顺序为():

if ((FuncOne $valOne) -and (FuncTwo $valTwo)) {
    # They both returns a truthy value
}