作为 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
。
令我惊讶的是,我得到的结果是 11001101
(bin(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'))
我没有使用 PowerShell 的经验,所以我试图在输入二进制时进行一些按位运算(纯粹是为了提高可读性)。我使用以下函数与二进制文件相互转换,它们似乎有效。
function bin($a){
return [convert]::ToString($a,2)
}
function unbin($a){
return [convert]::ToInt64($a,2)
}
然后我尝试运行以下内容:
bin(unbin('11001101') -bxor unbin('10110110'))
期待输出 1111011
。
令我惊讶的是,我得到的结果是 11001101
(bin(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'))