(8)Powershell中变量的定义和使用

上一节介绍了Powershell中的算术运算符,详细内容参考这里,这些运算符主要用于字符串的链接,组成bool表达式等用于对管道中的命令执行结果进行筛选,咱们将会后续的文章中讲到。shell


这一节主要介绍Powershell中变量的定义和使用,以及使用变量时应该注意的事项。编程


    和全部编程语言中的变量同样,Powershell中的变量也是存于存储值的内存单元,须要注意的是,Powershell中的变量是以美圆符号($)开头的单字节(通常是英文字符,虽然ISE中支持双字节的字符,可是像任何编程语言,咱们不鼓励不同意使用中文等命名的变量)文本字符串表示,如 $a, $b 或者是 $my_str。数组

     在Powershell中有3种不一样的变量编程语言

  • 用户本身建立的变量编辑器

    用户建立的变量由用户建立和维护。默认状况下,在 PowerShell 命令行中建立的变量只在当前PowerShell 窗口有效。关闭该窗口后,变量也会自动销毁(再次打开命令窗口再也不存在,不能再引用以前定义的变量)。若要保存变量并使其在窗口关闭并再次打开时仍然有效,须要将其添加到 PowerShell 配置文件中(但并不建议这么作)。若是是在编写脚本,则能够在脚本中建立具备全局或局部做用域的变量。ide

  • 自动变量学习

    自动变量也称为内置变量,用于存储 PowerShell 的一些状态信息。这些变量由 PowerShell 建立和维护,PowerShell 根据须要更改变量值以保持其准确性。用户不能更改这些变量的值。例如,$PSHome 变量存储 PowerShell 安装目录的路径。this

  • 首选项变量spa

    首选项变量就是Powershell当前命令窗口环境的首选项设置,这些变量由Powershell建立,并以默认值填充,用户能够更改这些变量的值,如 $MaximumHistoryCount 是历史记录的最大条数。命令行


变量的定义和使用

建立(定义)新变量或更改变量的值,请使用如下格式的赋值语句

$<variable> = <value>

例如如下定义了字符串变量 $myStr 并修改了其值。若是要显示变量的值,直接输入变量的名称,包括美圆符号$。

PS C:\> $myStr="This variables defined by user"
PS C:\> $myStr
This variables defined by user
PS C:\> $myStr="user has changed the value of this variables"
PS C:\> $myStr
user has changed the value of this variables

在定义和使用变量时,可使用单引号和双引号,但须要注意单引号和双引号的区别。

PS C:\> $myStr='this is string variables'
PS C:\> $youStr='your want to display the $myStr'
PS C:\> $youStr
your want to display the $myStr

注意上面的变量定义使用的单引号,变量 $youStr 中的变量 $myStr 并无替换为其所表明的值,而是直接输出,意味单引号中的内容会直接输出,不作变量值的替换


PS C:\> $myStr="this is string variables"
PS C:\> $youStr="your want to display the $myStr"
PS C:\> $youStr
your want to display the this is string variables

注意上边的变量的定义使用的双引号,变量$youStr 中的变量 $myStr 会替换为其所表明的值,意味着双引号中的变量名在会替换为变量所表明的值


若是须要在双引号表示的变量中输出变量名,即 $youStr="your want to display the $myStr" 你不想让变量 $youStr 中的 $myStr 发生替换,则须要在变量名以前添加英文符号倒引号"`"进行转义,在英文输入状态下,这个键位于"Esc"键的下面,注意下面命令的输出内容。

PS C:\> $myStr="this is string variables"
PS C:\> $youStr="your want to display the `$myStr"
PS C:\> $youStr
your want to display the $myStr

变量的保存

用户建立的变量只在当前会话中可用,关闭会话(当前命令窗口)变量将丢失。若是须要保存变量,就须要将其保存在配置文件中,配置文件中的变量将在命令窗口打开时自动加载,将会添加全部的会话中。

能够在命令行输入 $profile 来查看配置文件的路径

例如,若是须要修改 $VerbosePreference 变量的值为 "Continue" (默认是"SilentlyContinue"),能够再命令行输入 $profile 找到配置文件的路径,经过Notepad等文本编辑器进行修改,或是利用 Add-Content 进行修改。

如下命令将 $VerbosePreference 变量的新值添加到"CurrentUser,AllHosts"配置文件中

add-content -path $profile.CurrentUserAllHosts -value '$VerbosePreference = "Continue"'

包含特殊字符的变量名称

若是变量中包含特殊字符,可使用大括号{} 强制Powershell按字面解释变量名称,若是要定义或是引用包含特殊字符(如短划线,句点,冒号,圆括号)的变量,这会很是有用。

PS C:\> ${this is string array}="a","b","c"
PS C:\> ${this is string array}
a
b
c

以上命令定义了的变量名是 ${this is string array}。


如要引用的变量名称包含圆括号,用大括号将变量名称括起来

PS C:\> Get-ChildItem ${env:ProgramFiles(x86)}

    目录: C:\

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----          2012-8-7     11:40            Documents and Settings
d----        2016-10-29     21:35            DTLFolder
...

若是要引用变量名称包含大括号,用大括号将变量名称括起来,变量内部的大括号以前添加倒引号"`"字符转义大括号,倒引号是在引文输入状态下,键盘上"Esc"下面的按键,这个相似于上文讲到的若是在双引号中不想对变量名称替换为值时添加的倒引号。

PS C:\> ${this`{value`}is} = 1
PS C:\> ${this`{value`}is}
1

总结

    关于变量,须要注意的是,Powershell中的变量可使用特殊字符,另外Powershell中的变量能够存储任何类型的对象,整数,字符串,数组,哈希表,服务,进程,事件日志等,便可以将任何一条命令的执行结果赋值给一个变量。最后,在定义变量时,不能定义与内置变量名称同样的变量,由于内置变量是只读,不容许用户更改,会在Powershell的内置变量中讲到Powershell中都包含哪些内置变量。


ps:若是在学习时有什么疑问,欢迎在评论区留言。

相关文章
相关标签/搜索