(12)Powershell中變量的類型

    Window Powershell中變量的類型與Java,C#等高級語言中變量的類型不一樣,可以不用顯示指定Powershell中變量的類型,即Powershell中的變量具有更大的靈活性。Powershell中的變量採用 .Net Framework類型。

    默認情況下,當變量只有一個值時,變量的數據類型由賦予變量的值決定。例如,下面的語句創建一個整數 (System.Int32) 類型的變量:

PS C:\> $a=3

    如果需要確定變量的 .NET Framework 類型,可以使用 GetType() 方法(該方法沒有任何參數)的 FullName 屬性,例如:

PS C:\> $a=3
PS C:\> $a.GetType().fullname
System.Int32

    創建字符串變量與Java,C#高級語言一致,需要把值放在引號內。例如:

PS C:\> $a = "3"
PS C:\> $a.GetType().fullname
System.String

    如果賦予變量的第一個值是字符串,則 PowerShell 將所有運算都視爲字符串運算(字符串的連接),並將新值轉換爲字符串。例如以下語句執行的結果34是字符串(可以獲取其類型來驗證):

PS C:\> $a = "3"
PS C:\> $a += 4
PS C:\> $a
34

    Powershell中也可以強制指定變量的類型。

    在變量名稱之前放置類型名稱或第一個所賦值前面的方括號中,可以將新的標量變量轉換爲任何 .NET Framework 支持的類型。在轉換變量時,可以確定該變量所能存儲的數據的類型。同時,還可以確定只有符合類型的變量纔可以賦值給指定的變量。還可以確定填充變量時的變量行爲方式。

    例如,以下命令將變量轉換爲字符串類型。    

PS C:\> [string]$a=30
PS C:\> $a += 5
PS C:\> $a
305

    下面的語句轉換第一個值,而不是轉換變量:

PS C:\> $a = [string]30

    將變量轉換爲特定類型時,通常的約定是轉換變量而不是值。但是,如果現有變量的值不能轉換爲新數據類型,則不能重新轉換該變量的數據類型。要更改數據類型,必須替換該變量的值(相當於創建新的變量),例如:

PS C:\> $b = "string"
PS C:\> [int]$b
無法將值“string”轉換爲類型“System.Int32”。錯誤:“輸入字符串的格式不正確。”
所在位置 行:1 字符: 8
+ [int]$b <<<<
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException

PS C:\> [int]$b = 4

    


    將數據類型放在變量名稱的前面會鎖定變量的類型,除非通過指定另一個數據類型顯式覆蓋該類型。

    如果試圖賦予與現有類型不兼容的值,並且未顯式覆蓋該類型,則 Windows PowerShell 將顯示錯誤,例如:

PS C:\> $a = 3
PS C:\> $a = "string"
PS C:\> [int]$a = 3
PS C:\> $a = "string"
無法將值“string”轉換爲類型“System.Int32”。錯誤:“輸入字符串的格式不正確。”
所在位置 行:1 字符: 3
+ $a <<<<  = "string"
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException

PS C:\> [string]$a = "string"

    在 PowerShell 中,通過數組包含多個項的變量的數據類型的處理方式與包含單個項的變量的數據類型不同。除非明確向數組變量指定數據類型,否則其數據類型始終是 System.Object []。此數據類型是特定於數組的。也可以通過指定另一個類型來覆蓋默認類型。例如,下面的語句將變量轉換爲 string [] 數組類型:

PS C:\> [string]$a = "string"
PS C:\> [string[]] $a = "one","two","three"

    PowerShell 變量可以是任何 .NET Framework 數據類型。此外,也可以賦予在當前進程中可用的任何完全限定的 .NET Framework 數據類型。例如,下面的語句指定 System.DateTime 數據類型:

PS C:\> [system.datetime]$a = "4/1/2017"
PS C:\> $a

2017年4月1日星期六 00:00:00

爲多個變量賦值

    PowerShell 中,可以使用單個命令對多個變量賦值。所賦值的第一個元素將賦予第一個變量,第二個元素賦予第二個變量,第三個元素賦予第三個變量,依此類推。例如,下面的命令將值 4 賦予 $a 變量,將值 5 賦予 $b 變量,並將值 6 賦予 $c 變量:

PS C:\> $a,$b,$c = 4,5,6
PS C:\> $a
4
PS C:\> $b
5
PS C:\> $c
6

    如果所賦值包含的元素個數超過變量個數,則將所有剩餘的值都賦予最後一個變量。例如,下面的語句包含三個變量和五個值:

PS C:\> $a,$b,$c = 4,5,6,7,8
PS C:\> $a
4
PS C:\> $b
5
PS C:\> $c
6
7
8
PS C:\> $c.GetType().fullname
System.Object[]

    注意最後一個變量的類型是System.Object[]。

    要將 $c 變量中的值賦予另外三個變量,請使用下面的格式:

PS C:\> $d,$e,$f = $c
PS C:\> $d
6
PS C:\> $e
7
PS C:\> $f
8

    上面的命令將值 6 賦予 $d 變量,將值 7 賦予 $e 變量,並將值 8 賦予 $f 變量。

    通過串聯變量,還可以將單個值賦予多個變量。例如,以下以下語句將值"string"賦予所有四個變量:

PS C:\> $a = $b = $c = $d = 9
PS C:\> $a
9
PS C:\> $b
9
PS C:\> $c
9
PS C:\> $d
9

總結

    本節介紹了Powershell中變量的類型,通過本節的學習應當掌握以下內容

  1. 根據變量的值可以判斷變量的類型,可以通過變量的GetType()方法的fullname屬性。

  2. Powershell變量類型不同,進行的運算也不同(如是數字值的相加還是字符串的連接)。

  3. 給多個變量賦值或是把一個值賦值給多個變量(變量的串聯)。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章