0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

要素一つのジャグ配列とWrite-Output

Last updated at Posted at 2022-01-17

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
の最後の例で理由が確認できる。

関数の戻り値 => パイプライン経由の値ということなのかな?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?