作为 PowerShell 函数参数的表达式

Expressions as PowerShell function parameters

我没有使用 PowerShell 的经验,所以我试图在输入二进制时进行一些按位运算(纯粹是为了提高可读性)。我使用以下函数与二进制文件相互转换,它们似乎有效。

function bin($a){
    return [convert]::ToString($a,2)
}
function unbin($a){
    return [convert]::ToInt64($a,2)
}

然后我尝试运行以下内容:

bin(unbin('11001101') -bxor unbin('10110110'))

期待输出 1111011

令我惊讶的是,我得到的结果是 11001101bin(unbin('11001101')) 的结果)。

为了让我的代码正常工作,我需要将 unbin 调用括在更多括号中,但我不明白为什么:

bin((unbin('11001101')) -bxor (unbin('10110110')))

为什么需要这些额外的括号?

请注意,PowerShell 中的函数调用更类似于调用 cmdlet,而非.NET 方法。所以你有很多不必要的括号,并且遗漏了一些相关的括号。以下代码

bin(unbin('11001101') -bxor unbin('10110110'))

将一个参数传递给 bin(括号中的完整内容),但将 三个 传递给第一个 unbin 调用。相当于

unbin '11001101' -bxor "unbin('10110110')"

(如果我没记错的话;细节可能会有所不同(可能是四个),但这就是它的要点)。

调用 PowerShell 函数时,参数不会在括号中传递。 -bxor 的操作数本身必须是表达式,因此任何管道都必须用括号括起来:

bin ((unbin '11001101') -bxor (unbin '10110110'))