Windows PowerShellを使い始めました。
コマンドプロンプトでバッチを組むより、遥かに使いやすいです。Windowsに標準でインストールされている為、Windowsであればインストールしなくても使えるのが良いですね。
ある日、PowerShellでスクリプトを作成しました。
スクリプトの一部では、文字列内に配列型変数をインデックス付きで展開する必要があります。
いつも通り変数を展開する書式で記述すると。。。正常に配列型変数の展開ができない事象が発生しました。
というわけで、PowerShell初心者が一度は躓くであろう配列型変数の展開方法について紹介します。
${}では配列型変数のインデックスは展開できない
見出しで全てを語っていますが、発生した事象について説明します。
私は文字列内で変数を展開する時は「${}」で変数を括って、展開をしていました。
しかし、配列型変数をインデックス付きで展開しようとすると、要素が取得できません。
$var = "Hello" $array = "Good Morning", "Hello", "Good Evening" "${var} World!" # => Hello World! # ダブルクォーテーションで括っていなければ、正常に展開できる ${array[0]} # => Good Morning! # ダブルクォーテーションで括ると、要素が取得できない "${array[1]} World!" # => World! # ${}で括らない場合、インデックスをそのまま返し、配列内の全要素を展開する "$array[0]" # => Good Morning Hello Good Evening[0]
部分式演算子または書式設定演算子を使う
部分式演算子とは「$()」で変数や式などを括る演算子です。()内の文を先に評価し、結果を返します。
配列型変数のインデックスを先に評価することにより、正常に展開することができます。
書式設定演算子とは文字列に対して「[文字列] -f [書式]」で書式を設定する演算子です。書式に変数やオブジェクトを指定し、文字列でインデックスを指定します。
変数が配列の場合、インデックスは配列に対してのインデックスを返す為、正常に展開することができます。
$array = "Good Morning", "Hello", "Good Evening" # 部分式演算子で展開 "$($array[1]) World!" # => Hello Wolrd! # 書式設定演算子で展開 "{2} World!" -f $array # => Good Evening World!
まとめ
文字列内で配列型変数を展開する方法を紹介しました。
あまり意識せずに変数展開の書式を使っていましたが、配列型変数を展開する場合には注意が必要です。
- 部分式演算子「$()」を使う
- 書式設定演算子「[文字列] -f [書式]」を使う