未分類

PowerShell - $_ 変数と $input 変数の違い

Windows PoweShell では、パイプライン処理から受け取ったオブジェクト (コレクション) は、変数 $_ または変数 $input で処理することができます。

パイプラインから送られてきたオブジェクトを変数 $_ で受け取る

このサンプルでは、3 つの値が個別にパイプラインを通じて送られてきます。その都度、その値が変数 $_ に格納されます。

(1, 2, 3) | % {$_ * 2} 

パイプラインから送られてきたオブジェクトを変数 $input で受け取る

このサンプルでは、3 つの値が個別にパイプラインを通じて送られてきます。$input は受け取った引数の型に関係なく SZArrayEnumerator 型になるようです。この SZArrayEnumerator 型のままでは数値として扱うことができませんので、@($input) で通常の Array 型に変換します。パイプラインでは処理ごとに一つの数値が送られてきますので、@($input) 配列の要素数は常に 1 になります。従って、受け取った値は常に要素 0 に格納されています。

(1, 2, 3) | % {@($input)[0] * 2} 

-未分類