未分類

PowerShell - ファンクションに渡す引数をかっこで囲む時と囲まない時の違い

Windows PowerShell で、ファンクションをコールする際、文法上はファンクションにはカッコは必要ありませんが、引数を囲むかっこと見分けがつきにくいことがあります。

引数が 1 つの場合

1. 次のファンクションを作成します。

function test ($v1) { $v1 * 2 }

2. 引数を 1 つ渡す場合のファンクションコールの仕方です。引数をカッコで囲っても囲まなくても構いません。囲んだ場合はメソッドのかっこの中に引数を書いているように見えますが、そうではありません。引数側にカッコが付いています。

test 3
test (3) 

2. 引数に計算式を渡す場合のファンクションコールの仕方です。計算式自体を渡すために必ずかっこで囲む必要があります。このように引数をカッコで囲み引数が 1 つであることを明確にしています。もし、 test 1 + 2 のようにカッコなしでコールした場合には、引数が 1, +, 2 の合計 3 個となってしまい、最初の 1 しか処理されません。

test (1+2)

■ 引数が複数の場合

1. 次のファンクションを作成します。

function test ($v1, $v2) { $v1 * $v2 } 

2. 引数を複数渡す場合のファンクションコールの仕方です。引数をカッコで囲っても囲まなくても構いません。引数が 1 つの場合はメソッドのカッコの形式と区別がつきませんでしたが、複数の場合は引数自体をかっこで囲んでいることがはっきりと分かります。

test 2 3 test (2) (3) 

2. 引数に計算式を渡す場合のファンクションコールの仕方です。計算式自体を渡すために必ずかっこで囲む必要があります。各引数をかっこで囲み個々の引数を明確にしています。もし、test 1 + 2 2 + 3 のようにかっこなしでコールした場合には、引数が 1, +, 2, 2, +, 3 の合計 6 個となってしまい、最初の 2 つの引数しか処理されません。

test (1 + 2) (2 + 3) 

■ 引数が参照渡しの場合

1. 次のファンクションを作成します。

function test { param ([ref]$a) $a.Value = $a.Value * 2 } 

2. ファンクションをコールします。参照渡しの場合は必ず引数をかっこで囲む必要があります。囲まないとエラーになります。

[int]$val = 20
test ([ref]$val)
$val

-未分類