(12)Powershell中变量的类型

    Window Powershell中变量的类型与Java,C#等高级语言中变量的类型不同,能够不用显示指定Powershell中变量的类型,即Powershell中的变量具备更大的灵活性。Powershell中的变量采用 .Net Framework类型。shell

    默认状况下,当变量只有一个值时,变量的数据类型由赋予变量的值决定。例如,下面的语句建立一个整数 (System.Int32) 类型的变量:数组

PS C:\> $a=3

    若是须要肯定变量的 .NET Framework 类型,可使用 GetType() 方法(该方法没有任何参数)的 FullName 属性,例如:ide

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是字符串(能够获取其类型来验证):spa

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

    Powershell中也能够强制指定变量的类型。orm

    在变量名称以前放置类型名称或第一个所赋值前面的方括号中,能够将新的标量变量转换为任何 .NET Framework 支持的类型。在转换变量时,能够肯定该变量所能存储的数据的类型。同时,还能够肯定只有符合类型的变量才能够赋值给指定的变量。还能够肯定填充变量时的变量行为方式。three

    例如,如下命令将变量转换为字符串类型。    进程

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

    下面的语句转换第一个值,而不是转换变量:ci

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. 给多个变量赋值或是把一个值赋值给多个变量(变量的串联)。

相关文章
相关标签/搜索