配列の展開
基本形
○ 1..10 | %{$_}
ダブルコーテーション内の変数展開
○ 1..10 | %{"$_"}
ダブルコーテーション内に文字列があっても展開してくれる。
○1..10 | %{"$_ abc"}
しかし$_に文字列をくっつけると(さっきのは半角スペースあけている)
×1..10 | %{"$_abc"}
エラーは出ない。10回ループは行われるが何も表示されない。
考えてみれば当たり前で、$_abcという名前の変数と認識してしまう。どうしても間の半角スペースを無くしたい場合は
1..10 | %{($_.ToString() + "abc")}
ですね。
dir なども結果はオブジェクトの配列なので
○dir | %{$_}
ファイル名が列挙される。しかもパイプで渡されるのはオブジェクトなのでメソッド、プロパティを持っている。
○dir | %{$_.FullName}
ファイル名がフルパスで表示される。しかし、
× dir | %{"$_.FullName"}
ダブルコーテーションで囲むとプロパティの展開は行われない。ファイル名.FullName と表示されてしまう。
どうやらダブルコーテーション内の展開は$_までで、それをtoString()として展開しているみたい。
だからどうしても動かしたい場合は
dir | %{$x = $_.FullName; "$x";}
しかないか。