スクリプトは独自のスコープを持っており、スクリプト内部で定義した関数や変数はスクリプトの実行が終了したあとは破棄されます。ですが、例えばスクリプトに関数の定義を集めてライブラリを作成するなど、スクリプト終了後もスクリプト内の関数や変数を有効にしたい場合があります。そのようなときに利用できるのがスクリプトのドット化です。
スクリプトのドット化は、スクリプトのスコープをスクリプトが実行されたスコープに合わせます。確認のためにスクリプトdottest.ps1を作成し、通常の実行とドット化を比較します。
PS > @'
>> $x = 10
>> function hello($name) {
>> "Hello, " + $name
>> }
>>
>> hello Tom
>> '@ > dottest.ps1
>>
PS > .\dottest.ps1
hello Tom
PS > $x
PS > hello John
用語 'hello' は、コマンドレット、関数、操作可能なプログラム、
またはスクリプト ファイルとして認識されません。
用語を確認し、再試行してください。
PS > . .\dottest.ps1
Hello, Tom
PS > $x
10
PS > hello John
Hello, John
このように、通常のスクリプトの実行ではスクリプト内で定義されている変数$xと関数helloはスクリプト外からは使用できませんが、ドット化ではスクリプト内で定義した変数や関数をスクリプト終了後も使用できています。
スクリプトのドット化はグローバルで実行するのではなくあくまでスコープを広げるだけです。
PS > @'
>> . .\dottest.ps1
>>
>> $x
>> hello John
>> '@ > dottest2.ps1
>>
PS > .\dottest2.ps1
Hello, Tom
10
Hello, John
PS > hello Anne
用語 'hello' は、コマンドレット、関数、操作可能なプログラム、
またはスクリプト ファイルとして認識されません。
用語を確認し、再試行してください。
dottest.ps1をdottest2.ps1内でドット化していますが、dottest2.ps1をドット化していないためグローバルではdottest.ps1内の定義は利用できません。
posted by bakemoji at 09:24|
Comment(0)
|
TrackBack(0)
|
PowerShell
|

|