begin, process, end
PowerShellでは、パイプラインで受け取った値を処理する方法にbegin
/process
/end
というものが存在します。まずは、下記スクリプトを入力してください。
PS > function f >> { >> begin { $local:cnt = 1 } >> process { ("$local:cnt:$_"); $local:cnt += 1 } >> end { $local:cnt } >> } >>
このスクリプトには、begin
/process
/end
がありますが、パイプラインから値を受け取ると
begin {最初の1回だけ実行}
process {パイプラインで受け取った値ごとに実行}
end {最後に1回だけ実行}
という動作をします。
つまり、先ほど入力した関数f
は、
- 最初にローカル変数
cnt
を1で初期化 - パイプラインから受け取った値(
$_
に値が代入されている)を表示し、ローカル変数をインクリメント - 最後にローカル変数の現在値を表示
ということを行います。
先ほど、パイプライン引数の値は$input
自動変数に入ることを説明しました。process
節でパイプラインの値を取得する場合は$_
自動変数となりますので、使用には注意してください。
実際に、この関数にパイプラインから値を渡してみましょう。
PS > "apple","banana","orange" | f 1:apple 2:banana 3:orange 4
パイプラインからの値を処理する際、前処理と後処理を行いたい場合は、ぜひ使用してみてください。
まとめ
今回は、前回に引き続きPowerShellでの関数の取り扱いを取り上げ、次の内容について解説しました。
- 関数をファイルに作成する
- 関数をプロファイルに登録する
- パイプライン引数
- begin, process, end
次回もPowerShellでの関数の取り扱いについて取り上げると共に、変数のスコープについても説明したいと思います。