主頁 > 知識(shí)庫 > Windows Powershell 變量的作用域

Windows Powershell 變量的作用域

熱門標(biāo)簽:如何根據(jù)經(jīng)緯度百度地圖標(biāo)注 莫拉克電梯系統(tǒng)外呼怎么設(shè)置 新鄭電銷機(jī)器人一個(gè)月多少錢 印臺(tái)區(qū)呼叫中心外呼系統(tǒng) 騰訊地圖標(biāo)注中心怎么標(biāo)注 六寸地圖標(biāo)注點(diǎn)怎么刪除 地圖標(biāo)注的圖案 電話機(jī)器人公司招聘 萬全縣地圖標(biāo)注app

如果我們對變量不做特別的聲明,Powershell解釋器會(huì)自動(dòng)處理和限制變量的作用域。將下面的內(nèi)容命令保存著至test1.ps1

$windows = $env:windir
“Windows Folder: $windows”

然后在控制臺(tái)給變量$windows賦值,并調(diào)用Test.ps1腳本。

PS> $windows="Hellow"
PS> .\test.ps1
Windows Folder: C:\Windows
PS> $windows
Hellow

調(diào)用腳本時(shí),會(huì)分配一個(gè)變量$windows,在腳本調(diào)用結(jié)束后,這個(gè)變量被回收,腳本中的變量不會(huì)影響腳本外的變量,因?yàn)樗鼈冊诓煌淖饔糜蛑?。powershell會(huì)針對每個(gè)函數(shù)和腳本給它們分配不同的作用域。

更改變量的可見性
你可以很容易的看到?jīng)]有Powershell解釋器自動(dòng)限制可見性時(shí)會(huì)發(fā)生什么狀況,同樣是剛才的腳本,剛才的命令,只是在運(yùn)行腳本時(shí)多加上一個(gè)點(diǎn)”.” 和一個(gè)空格:

PS> $windows="Hellow"
PS> . .\test.ps1
Windows Folder: C:\Windows
PS> $windows
C:Windows

在運(yùn)行腳本時(shí)使用一個(gè)原點(diǎn)和空格,Powershell解釋器就不會(huì)為腳本本身創(chuàng)建自己的變量作用域,它會(huì)共享當(dāng)前控制臺(tái)的作用域,這種不太靈活但卻簡單的方法,使用時(shí)一定要格外小心。

加強(qiáng)變量可見性限制的優(yōu)點(diǎn):清空初始化環(huán)境
可以假設(shè)一個(gè)場景,如果你在當(dāng)前控制臺(tái)不小心定義了一個(gè)只讀的常量,這個(gè)常量既不能更新也不能刪除,很是麻煩。但是如果你在腳本中操作這個(gè)變量就不成問題,因?yàn)槟_本有自己的作用域。例如,將下面文本保存為test.ps1,并調(diào)用沒有任何問題:

New-Variable a -value 1 -option Constant
"Value: $a"PS> .\test.ps1
Value: 1
PS> .\test.ps1
Value: 1

但是如果你通過圓點(diǎn)禁用作用域限制,調(diào)用test.ps1,就會(huì)有異常,因?yàn)橐粋€(gè)常量不能被創(chuàng)建兩次。

PS> . .\test.ps1
Value: 1
PS> . .\test.ps1
New-Variable : A variable with name 'a' already exists.
Attest.ps1:1 char:13
+ New-Variable  a -value 1 -option Constant
  + CategoryInfo     : ResourceExists: (a:String) [New-Variable], SessionStateException
  + FullyQualifiedErrorId : VariableAlreadyExists,Microsoft.PowerShell.Commands.NewVariableCommand

所以這種變量的作用域限制可以把變量的沖突降到最小。

設(shè)置單個(gè)變量的作用域
到目前為止,看到的變量作用域的改變都是全局的,能不能針對某個(gè)具體變量的作用域做一些個(gè)性化的設(shè)置。

$global
全局變量,在所有的作用域中有效,如果你在腳本或者函數(shù)中設(shè)置了全局變量,即使腳本和函數(shù)都運(yùn)行結(jié)束,這個(gè)變量也任然有效。

$script
腳本變量,只會(huì)在腳本內(nèi)部有效,包括腳本中的函數(shù),一旦腳本運(yùn)行結(jié)束,這個(gè)變量就會(huì)被回收。

$private
私有變量,只會(huì)在當(dāng)前作用域有效,不能貫穿到其他作用域。

$local
默認(rèn)變量,可以省略修飾符,在當(dāng)前作用域有效,其它作用域只對它有只讀權(quán)限。

打開Powershell控制臺(tái)后,Powershell會(huì)自動(dòng)生成一個(gè)新的全局作用域。如果增加了函數(shù)和腳本,或者特殊的定義,才會(huì)生成其它作用域。在當(dāng)前控制臺(tái),只存在一個(gè)作用域,通過修飾符訪問,其實(shí)訪問的是同一個(gè)變量:

PS> $logo="www.jb51.net"
PS> $logo
www.jb51.net
PS> $private:logo
www.jb51.net
PS> $script:logo
www.jb51.net
PS> $private:logo
www.jb51.net
PS> $global:logo
www.jb51.net

當(dāng)調(diào)用一個(gè)已定義的函數(shù),Powershell會(huì)生成第二個(gè)作用域,它可以對調(diào)用者的作用域中的變量執(zhí)行讀操作,但是不能執(zhí)行寫操作。

PS> function f(){ "var=$var";$var="function inner";$var }
PS> $var="I am in console."
PS> $var
I am in console.
PS> f
var=I am in console.
function inner
PS> $var
I am in console.

怎樣把當(dāng)前控制臺(tái)中的變量保護(hù)起來,不讓它在函數(shù)和腳本中被訪問,Private修飾符就派上了用場。

PS> function f(){ "var=$var";$var="function inner";$var }
PS> $private:var="i am a private variable in console,other scope can not access me."
PS> f
var=
function inner
PS> $private:var
i am a private variable in console,other scope can not access me.

對于$private限制的變量能不能在函數(shù)中通過$global修改呢?不但不能修改,還會(huì)刪除當(dāng)前的$private變量

PS> Function f(){ "var=$var";$global:var=" Try to change variable in function"}
PS> $private:var="I am a private variable"
PS> $private:var
I am a private variable
PS> $var
I am a private variable
PS> f
var=
PS> $private:var
PS> $var
PS>
PS> $private -eq $null
True

但是$local 修飾的變量則可以通過$global在函數(shù)內(nèi)部更改。

PS> Function f(){ "var=$var";$global:var=" Try to change variable in function"}
PS> $var="I am a local variable."
PS> $var
I am a local variable.
PS> $private:var
I am a local variable.
PS> f
var=I am a local variable.
PS> $var
 Try to change variable in function
PS> $local:var
 Try to change variable in function

您可能感興趣的文章:
  • Windows Powershell 自動(dòng)化變量
  • Windows Powershell 環(huán)境變量
  • Windows Powershell 變量的類型和強(qiáng)類型
  • Windows Powershell 變量的幕后管理
  • Windows Powershell 命令返回?cái)?shù)組

標(biāo)簽:天水 疫苗接種 臨汾 喀什 南昌 汕頭 湘潭 襄陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Windows Powershell 變量的作用域》,本文關(guān)鍵詞  Windows,Powershell,變量,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Windows Powershell 變量的作用域》相關(guān)的同類信息!
  • 本頁收集關(guān)于Windows Powershell 變量的作用域的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章