次のページへPowerShellに限らず、すべてのプログラミング/スクリプト言語を記述するうえで欠かせないのが「変数」だ。いうまでもなく変数とは、コード上で値を格納し、処理した結果を反映し、また、ほかへと引き渡す、すべての処理を行う上での基本となる仕組みのことだ。(例えば)言語によっては変数を利用するうえで、あらかじめデータ型と名前を宣言する必要があるものもあるが、PowerShellにおいては、(多くのスクリプティング言語と同様)あらかじめ変数を宣言する必要はない。PowerShellでは、初めて値が代入されたタイミングで、必要に応じて変数が生成される(*)。従って、厳密にはPowerShellの変数には「未初期化」という状態はない。PowerShellでは「値を持つ変数」か「存在しない変数」があるだけである。変数の命名規則さてその変数を利用するに当たって、まず理解しておく必要があるのが変数の命名規則だ。前編でも簡単に触れたように、PowerShellでは変数名を以下の規則に従って命名する必要がある。先頭文字は「$」で始まること2文字目以降は任意の英数字、またはアンダースコア(_)であること厳密には${〜}のように、中カッコで変数名を囲めば任意の文字を利用できる。以下のような変数名でもよい。Framework}もちろん、変数名にはできるだけ内容が類推できる程度に簡潔な(必要以上に短く、ということではない)名前を付けることが重要であり、通常は上のような変数名を付けることは好ましくない。必要以上に長い変数名はタイプミスにもつながる一因であるので(しかも、PowerShellのように変数宣言が不要な言語ではタイプミスを検出するのが困難である)、通常は一般的な命名規則の中で変数名を決めるのが好ましいだろう。変数のデータ型PowerShellは、(やはり多くのスクリプティング言語と同様)データ型を区別しない言語である。厳密にはデータ型を持たないわけではなく、与えられた実データに応じてPowerShellが自動的に適切なデータ型を与えてくれる。従って、次のようなコードもPowerShellでは正しい。"abc"最初の文では変数$xには整数型が割り当てられ、次に文字列が代入されたところで$xは文字列型となる(文字列はクォート記号で囲む必要がある)。PowerShellがデータ型を持たないわけではない証拠に、変数のデータ型をGetTypeメソッドで確かめてみると、以下のようにSystem.Int32型が割り当てられていることが確認できる。System.ValueTypeこのようなデータ型の動的な認識は、多くのケースで便利なものであるが、時として思わぬ不具合をもたらす場合もある。Write-Outputはコマンドレットの1つで、指定された式の値を標準出力に出力する。PowerShellの「+」演算子には加算演算子と文字列連結演算子としての2つの役割がある。そのため「文字列+数値」ならば文字列連結演算子としての役割が優先され、「数値+文字列」ならば加算演算子としての役割が優先されるようである。規則を覚えてしまえばよいといえばそれまでであるが、当然、複雑なコードを記述していく中では誤解を招く一因ともなるもので、好ましくない。そこでPowerShellでは明示的に変数の型を宣言する方法も提供している。具体的には、以下のリストのように変数名の先頭に角カッコで囲んだデータ型を明示する(*)。"入力文字列の形式が正しくありません。これはPowerShellにおけるキャスト構文である。1.3」のようにすることで、右辺の値(1.3)をInt32型にキャストすることもできる。変数に型属性を明示的に宣言することで、PowerShellは代入する値を強制的にその型にキャスト(変換)しようと試みる。上のリストを見ても分かるように、Int32型として作成された変数に小数点数を格納した場合、整数にキャストされるし、もしもInt32型に変換できないような(例えば)文字列が渡された場合にはエラーを発生する。このようにPowerShellでは「データ型があいまいなままに使用することも、厳密にデータ型を区別して利用することも可能であること」「厳密にデータ型を指定した場合にもできるだけデータをその型に合致するように自動変換が行われること」を覚えておいていただきたい。Frameworkで提供される型名をそのまま利用できるが、一部のよく利用するデータ型についてはエイリアス(別名)が用意されており、より短い型名で表記できる。以下に、PowerShellで利用可能な主な型エイリアスをまとめておく。変数に格納できる重要なデータ型の1つとして「文字列」がある。PowerShellでは、この文字列を表すために、細かく分けると4種類の文字列リテラルを提供している。シングルクォートで囲まれた文字列ダブルクォートで囲まれた文字列シングルクォートで囲まれたヒア・ドキュメントダブルクォートで囲まれたヒア・ドキュメントヒア・ドキュメントについては後述するとして、まず押さえておいていただきたいのは、文字列はシングルクォート/ダブルクォートのいずれかで囲む必要があるということ、そして、このいずれで囲むかによってPowerShellの挙動が異なるということだ。具体的には次の例を見てほしい。