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

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

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

和所有编程语言中的变量一样,Powershell中的变量也是存于存储值的内存单元,需要注意的是,Powershell中的变量是以美元符号($)开头的单字节(一般是英文字符,虽然ISE中支持双字节的字符,但是像任何编程语言,我们不鼓励不赞成使用中文等命名的变量)文本字符串表示,如 $a, $b 或者是 $my_str。

在Powershell中有3种不同的变量。

  • 用户自己创建的变量

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

  • 自动变量

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

  • 首选项变量

首选项变量就是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:如果在学习时有什么疑问,欢迎在评论区留言。

时间: 2024-10-07 11:18:54

(8)Powershell中变量的定义和使用的相关文章

(12)Powershell中变量的类型

Window Powershell中变量的类型与Java,C#等高级语言中变量的类型不一样,可以不用显示指定Powershell中变量的类型,即Powershell中的变量具有更大的灵活性.Powershell中的变量采用 .Net Framework类型. 默认情况下,当变量只有一个值时,变量的数据类型由赋予变量的值决定.例如,下面的语句创建一个整数 (System.Int32) 类型的变量: PS C:\> $a=3 如果需要确定变量的 .NET Framework 类型,可以使用 GetT

关于Unity中变量的定义

1.匀速运动的物体都要记得定义一个speed速度变量 2.不断产生很多相同物体的事件要记得定义时间生成物体的间隔rate,并且有一个一达到rate的值就清0的累加时间变量,累加时间变量是通过Time.Deltatime来累加的. 3.bool变量的定义 有时候不知道要定义哪些bool变量 其实我是这样分析的,这个事件有哪几种状态,如果只有两种,有和无,那就定义成bool类型的变量,比如 a.游戏是否开始 b.是否发射子弹(因为飞机有两种状态,一种是正常的不断发射子弹的状态,一种是发生某些意外事件

shell中变量被定义为星号(*)后无法引用的问题

在编写shell脚本的过程中,有的时候难免会用到一些变量值被定义为(*)的变量,但是当我们试图引用这个变量的时候bash有默认会把(*)替换成当前目录下的所有文件名的列表,如下: [[email protected]_102 ~]# a=* [[email protected]_102 ~]# echo $a anaconda-ks.cfg install.log install.log.syslog [[email protected]_102 ~]# ls  anaconda-ks.cfg 

python中变量的定义、命名规则、修改及使用原则

一.什么是变量 变量是用于在内存中存放程序数据的容器,以方便后续的调用.存储的方式为“变量名=值”,比如: name="张三" sex = "男" age = 18 height = 180 后边程序想要调用的时候,直接调用变量名即可: 1 print(name) 2 print(sex) 3 print(age) 4 print(heght) 在python中,定义变量时,不需要指定变量的类型! 二.变量的命名规则 变量的命名规则如下: 1.变量名只能是字母.数字

(9)Powershell中的内置变量

上一节主要介绍了Powershell中变量的定义和使用,以及在变量中包含特殊字符,或是变量在输出时的一些技巧,详细内容参考这里. 本节介绍Powershell中的内置变量,或是称为自动变量. 在Powershell命令行中,可以输入 Get-Variable 命令查看Powershell中的所有内置变量 PS C:\> Get-Variable Name                           Value ----                           ----- $ 

(15)Powershell中的类型运算符

这节介绍 Powershell 中的类型运算符. Powershell 中的类型运算符可以与 .Net Framework 类型协同使用,可以用来判断一个对象是否是指定的 .Net Framework 类型的一个实例,或是判断一个对象是否可以转换为 .Net Framework 类型. Powershell 支持以下类型运算符 运算符 说明 示例 -is 如果对象是指定的 .Net Framework 类型则返回 TRUE,否则返回 FALSE PS C:\> "abc" -is

变量存取范围及JSP、JSTL和Struts技术中变量的存取方法

JSP中变量的定义范围实际有5种:本地范围,页面范围(page),请求范围(request),会话范围(session)和应用程序范围(application). 以下介绍在各种技术中的变量存取方法. u       JSP中: 存储: 本地范围变量直接定义,如: String name="name in page"; page范围变量保存在pageContext隐式对象中,如: pageContext.setAttribute("nameContext",&quo

头文件中不可以放变量的定义

注意头文件中不可以放变量的定义!!!一般情况下头文件中只放变量的声明,因为头文件 要被其他文件包含(即#include),如果把定义放到头文件的话,就不能避免多次定义变量, C++不允许多次定义变量,一个程序中对指定变量的定义只有一次,声明可以无数次. 不过有三个例外,一下三中实体的定义也可放到头文件中 1.值在编译时就已知的const 变量的定义可以放到头文件中 如:const int num(10); 2.类的定义可以放到头文件中 3.inline 函数 4.C++11的新特性 conste

BOS项目 第10天(activiti工作流第二天,流程变量、组任务、排他网关、spring整合activiti、项目中实现流程定义管理)

BOS项目笔记 第10天 今天内容安排: 1.流程变量(设置.获取) 2.组任务(候选人.候选组) 3.排他网关使用 4.spring整合activiti 5.将activiti应用到bos项目中 6.在bos项目中实现流程定义管理(部署.查询.查看png.删除) 1. 流程变量 1.1 设置流程变量的方式 l 方式一:启动流程实例时设置 l 方式二:办理任务时设置 l 方式三:使用RuntimeService的set方法设置 l 方式四:使用TaskService的set方法设置 注意:如果设