重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

powershellにおける"foreach"の動作について2点質問です。
動作環境はWindows7 SP1。
powershellのバージョンは以下の通りです。

PS C:\> $PSVersionTable

Name Value
---- -----
CLRVersion 2.0.50727.5472
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1


PS C:\>




【サンプル1】
test1.ps1
--------------------
$WEEK = "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
foreach ($x in $WEEK) {
if ( $x -notmatch '^T' ) { continue }
$x
}
--------------------

実行結果は

Tuesday
Thursday

となります。


【サンプル2】
test.lst
--------------------
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
--------------------

test2.ps1
--------------------
Get-Content ".\test.lst" | foreach {
$x = $_
if ( $x -notmatch '^T' ) { continue }
$x
}
--------------------

実行すると、何も出力されていません。
"notmatch"を"match"に変えて実行してみると、

Sunday
Monday

と出力されます。
どうも"continue"でループを抜けてしまっている様です。

■質問1
サンプル1とサンプル2、やっている内容は同じだと思っていたのですが、何故こういう違いが起こるのでしょうか?



また、サンプル1の"foreach"を"ForEach-Object"に変えて実行すると、
「式またはステートメントのトークン 'in' を使用できません。」
とエラーになってしまいます。
aliasを切ってあるはずなのですが・・・

PS C:\> alias foreach

CommandType Name Definition
----------- ---- ----------
Alias foreach ForEach-Object


PS C:\>

■質問2
同じコマンドを実行しているはずなのに、こういう事が起こるのでしょうか?

よろしくお願いします。

A 回答 (1件)

「ループ構文を作る foreach」と「Foreach-Object のエイリアスとしての foreach」とは別物です.

    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。
別の動きをするものなのですね。
調べてみます!
ありがとうございました。

お礼日時:2013/09/24 14:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!