天地有情

PowerShellの変数

PowerShellの変数

■ 変数の命名規則

PowerShellでは変数名を以下の規則に従って命名する必要があります。

● 先頭文字は「$」で始まること
● 2文字目以降は任意の英数字、またはアンダースコア(_)であること

厳密には${~}のように、中カッコで変数名を囲めば任意の文字を利用できます。
例えば以下のような変数名でも構わない。

${Windows PowerShell + .NET Framework}

変数名にはできるだけ内容が類推できる程度に簡潔な名前を付けることが重要です.

■ 変数のデータ型

PowerShellは、多くのスクリプティング言語と同様にデータ型を区別しない言語です。
ただし,厳密にはデータ型を持たないわけではなく、与えられた実データに応じてPowerShellが自動的に
適切なデータ型を与えてくれます。
従って、次のようなコードもPowerShellでは正しい。

$x = 123
$x = "abc"

最初の文では変数$xには整数型が割り当てられ、次に文字列が代入されたところで$xは文字列型となります.
変数のデータ型をGetTypeメソッドで確かめてみると、

=================================================
PS > $x = 123
PS > $x.GetType()

IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
=================================================

System.Int32型が割り当てられていることが確認できます。

そこでPowerShellでは明示的に変数の型を宣言する方法も提供しています。
具体的には、以下のリストのように変数名の先頭に角カッコで囲んだデータ型を明示します。

=================================================
PS > [System.Int32] $x = 10
PS > $x = 13.5
PS > Write-Output $x
14 → 強制的にInt32型にキャスト
PS > $x = "abc"
値 "abc" を型 "System.Int32" に変換できません。エラー: "入力文字列の形式が正しくありません。"
発生場所 行:1 文字:3
+ $x <<<< = "abc"   → Int32型にキャストできないためエラー
=================================================

変数に型属性を明示的に宣言することで、PowerShellは代入する値を強制的にその型にキャスト(変換)
しようと試みます。上の例を見ても分かるように、Int32型として作成された変数に小数点数を格納した場合、
整数にキャストされるし、もしもInt32型に変換できないような(例えば)文字列が渡された場合にはエラーを
発生します。

このようにPowerShellでは「データ型があいまいなままに使用することも、厳密にデータ型を区別して利用する
ことも可能であること」「厳密にデータ型を指定した場合にもできるだけデータをその型に合致するように
自動変換が行われること」を覚えておくといいでしょう。


PowerShellでは.NET Frameworkで提供される型名をそのまま利用できますが、一部のよく利用するデータ型については
エイリアス(別名)が用意されており、より短い型名で表記できます。

====================================
エイリアス   .NET Frameworkの型名
---------------- -------------------
byte      System.Byte
int       System.Int32
long      System.Int64
single,float  System.Single
double     System.Double
decimal     System.Decimal
char      System.Char
bool      System.Boolean
string     System.String
array      System.Array
xml       System.Xml.XmlDocument
type      System.Type
=======================================

■ スコープ

PowerShell の変数はスコープをもっています。 普通に宣言した変数はローカルスコープを持っていて、
関数やブロックの外部からは参照できません。

: を挟んで変数名の前にスコープ名を書くことで、 ローカル以外のスコープの変数を読み書きできます。
(例えば、グローバルスコープの変数 a には、 $global:a という書き方でアクセスする。)

スコープは以下の4種類あります。


表1: スコープの種類


グローバル  global  どこからでも(スクリプトファイル外からでも)読み書き可能

スクリプト  script  同一スクリプトファイル内なら、どこからでも読み書き可能

ローカル   local   現在のブロック内か、子ブロック(ブロック中にさらにブロックを書く)から読み書き可能

プライベート private  現在のブロック内からのみ読み書き可能(子要素も除く)




スポンサーサイト
  1. 2013/06/18(火) 17:56:58|
  2. PowerShell
  3. | トラックバック:0
  4. | コメント:0
<<convbkmkコマンドの使い方 覚え書き | ホーム | PowerShell の演算子やエスケープ文字など>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://konoyonohana.blog.fc2.com/tb.php/34-86d26df8
この記事にトラックバックする(FC2ブログユーザー)