powershellで配列を作成していたら変な挙動をしたのでメモ。
まずは下記のようにジャグ配列を作る。
newArray1.ps1
# 要素が一つのジャグ配列
$new = @()
$add = 1,2,3
$new += ,$add
# $newの中身
$new.Count #=> 1
$new #=> 1,2,3
powershellは配列の構造が分かりにくいけど中身はこんな感じになっている。
$new = @(@(1,2,3))
次に上のコードを関数にしてみる。
newArray2.ps1
function New-Array{
# 要素が一つのジャグ配列を作成
$new = @()
$add = 1,2,3
$new += ,$add
return $new
}
# New-Arrayでジャグ配列を作成
$array = New-Array
# $arrayの中身
$array.Count #=> 1ではなく3が返る
$array #=> 1,2,3
関数の戻り値として扱うとジャグ配列がただの配列になってしまう。
$array = @(1,2,3)
returnをWrite-Output に変更するとうまくいくみたい。
newArray3.ps1
function New-Array{
# 要素が一つのジャグ配列を作成
$new = @()
$add = 1,2,3
$new += ,$add
Write-Output $new -NoEnumerate
}
# New-Arrayでジャグ配列を作成
$array = New-Array
# $arrayの中身
$array.Count #=> 1が返る
$array #=> 1,2,3
help Write-Output -example
の最後の例で理由が確認できる。
関数の戻り値 => パイプライン経由の値ということなのかな?