覚書:PowerShellの配列を舐めるループについて
PowerShell において、配列を舐める方法はforeach文を使う方法とForEarch-Objectコマンドレット(省略形は、%{ })を使う方法がある。
でも、この2つは等価ではない。
Windows PowerShellコマンド&スクリプティング入門:PowerShellスクリプティングの第一歩(後編) (3/5)に記載があるけれど、foreach文は全部読み込んでからループ、ForEach-Objectコマンドレットは一つずつ処理をするとのこと。
それだけでなく、break文の挙動も違う。
foreach文はbreakで自分のスコープが終了するだけ。外側には影響しない。
ForEach-Objectコマンドレットは、外側にも影響する。
> $a1 = @(1,2,3) > $a2 = @("a","b","c") > $a1 | %{ $_; foreach($i in $a2) { $i; break } } 1 a 2 a 3 a
> $a1 | %{ $_; $a2 | ForEach-Object { $_; break } } 1 a > $a1 | %{ $_; $a2 | %{ $_; break } } 1 a
TechNetのForEach-Objectの説明を読むと、最後のほうにエイリアスはforeachって書いてあるけど・・・。
« PowerShellでの奇妙な振る舞い | トップページ | 株:現物売り約定(ブリヂストン) »
コメント