2017-04-20 10 views
1

PowerShellの使用経験がほとんどないため、バイナリで入力する際に​​ビット単位の操作を実行しようとしていました(読みやすくするため)。私はバイナリとの間で変換するために以下の関数を使いました。PowerShell関数のパラメータとしての式

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

出力1111011を期待:

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

は、それから私は、次のように実行しようとしました。

私の驚いたことに、代わりに11001101(結果はbin(unbin('11001101')))となります。

私はさらにカッコ内unbinの呼び出しをラップするために必要な、私は理由を理解することはできません私のコードは、仕事を得るために:

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

は、なぜこれらの余分な括弧が必要とされていますか?

答えて

2

PowerShellの関数呼び出しは、ではなく、の.NETメソッドを呼び出すより似ています。だからあなたはそこに不必要なカッコが多く、関連するものがいくつかありません。次のコード

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

最初unbin呼び出しに(括弧の完全な内容)bin 1つの引数を渡すが、。

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

(私が間違っていない場合は、詳細は異なる場合がありますが、それはその要点です)と同等です。

PowerShell関数を呼び出すとき、引数はカッコで渡されません。そして-bxorへのオペランドは、表現そのものでなければならないので、任意のパイプラインが括弧する必要があります。

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

大丈夫、それは素晴らしいことだ、なぜオブジェクトのメソッドは、括弧などが必要なのですか'' test ".Split" e "'は '' test ''の間に動作しません。 –

+0

注PowerShellでの経験はほとんどないので、この時点ではコマンドレットやメソッドなどの違いがわかりません。 –

+0

.NETメソッドは、C#での動作と同様に呼び出されます。コマンドレットと関数は設計されています。結局のところ、引数はスペースだけで区切られたシェルコマンドに似ています。 – Joey

関連する問題