この記事では、PowerShellの変数のデータ型について説明します。
データ型を指定しない変数による+演算
Powershellの変数は、変数に値を代入する際に、変数のデータ型を指定しなくても、任意のデータ型を代入できます。
しかし、データ型を意識しない変数の仕様は、プログラムのバグの原因となることがあるので、注意が必要です。
特に、データ型が異なる変数同士の演算は、期待していた結果と異なる可能性があります。
数値と数値の+演算
PS> $a = 10 PS> $b = 20 PS> $a + $b 30
数値10と数値20の+演算では、結果は数値30になります。
数値と文字列の+演算
PS> $a = 10 PS> $b = "25" PS> $a + $b 35
数値10と文字列”25″の+演算では、算術演算として扱われます。
最初に使用された$aのデータ型に合わせて、文字”55″が数値55に変換されます。
文字列と数値の+演算
PS> $a = 10 PS> $b = "25" PS> $b + $a 2510
文字列”25″と数値の10を+演算すると、文字列連結として扱われます。
最初に使用された$bのデータ型に合わせて、数値10が文字”10″に変換されます。
数値と文字列(数値に変換できない文字列)の+演算
PS> $a = 10 PS> $b = "test" PS> $a + $b 値 "test" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。" 発生場所 行:1 文字:1 + $a+$b + ~~~~~ + CategoryInfo : InvalidArgument: (:) []、RuntimeException + FullyQualifiedErrorId : InvalidCastFromStringToInteger
数値に変換できない文字”test”との算術演算では、エラーが発生します。
文字列と数値の+演算
PS> $a = 10 PS> $b = "test" PS> $b + $a test10
文字列”test”と数値の10を+演算すると、文字列連結として扱われます。
最初に使用された$bのデータ型に合わせて、数値10が文字”10″に変換されます。
データ型の指定
変数を定義するときには、データ型を指定できます。
データ型を指定した変数は異なるデータ型の値の代入ができなくなるため、プログラムの論理的な間違いを発見しやすくなります。
データ型の指定
[データ型] 変数 = 値
配列が保持するデータ型の指定
[データ型[]] 変数 = @(配列の要素)
整数型を指定して変数を定義する例
PS> [int32]$a = 10 PS> [int]$b = 20 PS> $a + $b 30
整数型に解釈できないデータを格納した場合の例
PS> $b="test" 値 "test" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。" 発生場所 行:1 文字:1 + $b="test" + ~~~~~~~~~ + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException
整数型を要素に持つ配列を定義する例
PS> [int[]]$c = @(1,2,3) PS> $c[0] = 5
配列の要素に整数型に解釈できないデータを格納した場合の例
PS> $c[0]="test" 値 "test" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。" 発生場所 行:1 文字:1 + $c[0]="test" + ~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) []、RuntimeException + FullyQualifiedErrorId : InvalidCastFromStringToInteger
Set-Variableコマンドレット
変数の値を誤って上書きされたくない場合は、Set-Variableコマンドレットを使用します。
これは、読み取り専用の変数を定義できます。
Set-Variableコマンドレットの例
PS> Set-Variable -Name ver -Value 2.91 -Option Constant PS> $ver 2.91
上書きを試してみます。
PS> $ver=1.0 変数 ver は読み取り専用または定数であるため、上書きできません。 発生場所 行:1 文字:1 + $ver=1.0 + ~~~~~~~~ + CategoryInfo : WriteError: (ver:String) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId : VariableNotWritable
まとめ
今回はPowerShellの変数のデータ型の指定方法について説明しました。