这是我的代码:
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) {
...
}
发生了什么事?
答案 0 :(得分:3)
这是一个语法问题。
在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
}
答案 1 :(得分:2)
你实际上需要将函数放在括号中以便调用它:
if ((FuncOne($valOne)) -and (FuncTwo($valTwo))) {
...
}