PowerShell 変数のデータ型

PowerShell

この記事では、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の変数のデータ型の指定方法について説明しました。

 

タイトルとURLをコピーしました