86656


PowerShellのforeachステートメントでの挙動についてお聞きしたいです。  
以下が通常のforeach文です。

[code]

    $data = @('one','two','three')
    foreach ($a in $data) {
        "$a"
    }
    one
    two
    three
    
[/code]

配列の要素1つ1つが$aに代入されて出力されている認識です。  
以下がお聞きしたいforeach文です。

[code]

    $data = @('one', 'two', 'three')
    foreach ($a in ,$data){
        "$a"
    }
    one two three
    
[/code]

上記の文だと$aが配列になり、要素1つ1つが配列になった$aに代入されて出力されるイメージであってますでしょうか？


CC BY-SA 4.0
2022-03-02T13:11:36.333
86650
2022-03-02T20:49:41.447
2022-03-02T13:24:39.440
51662
51662
question
powershell
PowerShellのカンマ演算子の挙動について


正しいです。`.GetType()`で型を調べることで確認できます。

[code]

    PS> $data.GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     Object[]                                 System.Array
    
    
    PS> $data[0].GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     String                                   System.Object
    
[/code]

と`$data`は`Object[]`であり、その先頭要素`$data[0]`は`String`です。

`$data2 = ,$data`としたうえで

[code]

    PS> $data2 = ,$data
    PS> $data2.GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     Object[]                                 System.Array
    
    
    PS> $data2[0].GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     Object[]                                 System.Array
    
    
    PS> $data2[0][0].GetType()
    
    IsPublic IsSerial Name                                     BaseType
    -------- -------- ----                                     --------
    True     True     String                                   System.Object
    
[/code]

と`$data2`は`Object[]`ですが、その先頭要素`$data2[0]`は`Object[]`となります。更に先頭要素`$data2[0][0]`が`String`となります。


CC BY-SA 4.0
2022-03-02T20:49:41.447
86656
2022-03-02T20:49:41.447
4236
86650
answer