PowerShellのGet-Contentの仕様について、危険な落とし穴にご用心

今日はPowerShellのGet-Contentの仕様について話そうと思う。
Get-Contentは非常に柔軟に作られているため様々な取り込みができる。
しかし、仕様を理解していないと思わぬしっぺ返しがある。

例えば、以下のようなCSVデータがあったとする。

"1","2","3","4","5"
"6","7","8","9","10"
"11","12","13","14","15"

これをGet-Contentで変数に入れようとした時。
 $Data = Get-Content ファイルパス
 で、簡単に取り込むことができる。

 結果は、$Data[0]で、
“1”,”2″,”3″,”4″,”5″ と通常の行形式で出力される。

しかし、例えば以下のような一行のデータの場合は異なる挙動を示す。

"1","2","3","4","5"

このようなデータで $Data = Get-Content ファイルパス
とした時は、$Data[0] = “、$Data[1] = 1、$Data[2] = “
といった文字列単位のデータが出力される。

これを防ぐためには、
$Data = @(Get-Content ファイルパス)
といった配列形式を明示的に指定する必要がある。
結果は、$Data[0]で、
“1”,”2″,”3″,”4″,”5″ と行形式で出力される。

この仕様を知らないとデータ形式が一行だった場合、
意図しない動作をすることがあるので、注意が必要だ。
基本的にはGet-Contentでのデータの取り込みは、
@で括って配列形式として使うことをオススメする。

僕も以前はこの仕様を知らなかったので四苦八苦した覚えがある。 
PowerShellは気を使って簡潔ガバガバに書かせてくれるが、
ひょこっとした所で罠が仕掛けられていることもあるのだ。

ブログ主が運営しているゲームです。
こちらよりどうぞ

コメント

  1. K&K より:

    生きてて嬉しいぞ

  2. 山羊丸 より:

    はい、ありがとうございますw