在我们的迷你系列“Variables in Shells”中,了解如何在PowerShell中处理局部变量。
在计算机科学(和休闲计算)中,变量是内存中的位置,用于保存任意信息以供以后使用。换句话说,这是一个临时存储容器,你可以将数据放入或取出数据。在Bash shell中,该数据可以是单词(计算机语言中的字符串)或数字(整数)。
也许你以前从未(有意地)在计算机上使用过变量,但你可能在生活的另一个领域中使用过变量。当你说“给我那个”或“看看这个”之类的字眼时,你使用的是语法变量(你将它们视为代词)。 “ this”和“ that”的含义取决于你在脑海中所描绘的内容,或者是指你想作为受众了解你所指的指标的任何内容。在进行数学运算时,即使你可能不将变量称为变量,也可以使用变量来代表未知值。
本文介绍在Windows,Linux或Mac上运行的PowerShell中的变量。开源Bash Shell的用户可参考我有关Bash Shell中变量的文章(尽管你可以在Linux上运行PowerShell,并且它是开源的,因此你仍然可以继续阅读本文)。
注意:本文中的示例来自在开源操作系统Linux上运行的PowerShell会话,因此,如果你使用的是Windows或Mac,文件路径会有所不同。但是,Windows会自动将“/”转换为“”,并且所有示例都可以在所有平台上运行,只要你替换明显的差异(例如,从统计角度上讲,你的用户名不太可能设置为seth)。
变量是为了什么?
在PowerShell中是否需要变量取决于你在终端中执行的操作。 对于某些用户而言,变量是管理数据的基本手段,而对于另一些用户而言,它们是次要的和暂时的便利,或者对于某些用户而言,它们也可能不存在。
最终,变量是一种工具。 可以在发现它们的用途时使用它们,也可以放心地知道它们是由你的操作系统管理的。 但是,知识就是力量,而了解变量在Bash中的工作方式可以使你获得各种意想不到的创造性问题解决方案。
设置变量
你不需要特殊权限即可创建变量。 它们可免费创建,免费使用且通常无害。 在PowerShell中,可以通过定义变量名称,然后使用Set-Variable命令设置其值来创建变量。 下面的示例创建一个名为“FOO”的新变量,并将其值设置为字符串$ HOME / Documents:什么是变量?
操作成功是无言的,因此你可能不确定变量是否已被设置。 可以使用Get-Variable(简称gv)命令自己查看结果。 为了确保完全按照定义定义读取变量,也可以将其用引号引起来。 这样做会保留可能出现在变量中的所有特殊字符。 在此示例中,这并不适用,但这仍然是值得养成的好习惯:
请注意,FOO的内容与你设置的不是完全一致的。 你为变量设置的文字字符串为“$ HOME / Documents”,但现在显示为“/ home / seth / Documents”。 发生这种情况是因为您可以嵌套变量。 $ HOME变量指向当前用户的主目录,无论该目录位于Windows的C: Users,Linux的/ home或Mac的/ Users中。 由于$ HOME嵌入在FOO中,因此该变量在调用时会扩展。 通过这种方式使用默认变量可以帮助你编写可跨平台运行的可移植脚本。
变量通常用于将信息从一个系统传递到另一个系统。 在这个简单的示例中,你的变量不是很有用,但是它仍然可以传达信息。 例如,由于FOO变量的内容是文件路径,因此可以将FOO用作指向其值引用的目录的快捷方式。
要引用变量FOO的内容而不是变量本身,请在变量前加一个美元符号“$”:
清除变量
你可以使用Remove-Variable命令删除变量:
实际上,通常不需要删除变量。 变量相对“cheap”,因此可以创建它们,而在不再需要它们时就将其忘记。 但是,有时你可能想要确保变量为空,以避免将不需要的信息传递给可能读取该变量的另一个进程。
创建具有碰撞保护(collision protection)功能的新变量
有时,可能有理由相信你或其他进程已经设置了变量。 如果你不想覆盖它,则可以使用New-Variable,在已经存在相同名称的变量时它被设计为失败,或者可以使用条件语句首先检查变量:
注意:在这些示例中,假定FOO设置为“/ home / seth / Documents”。
或者,你可以构造一个简单的if语句来检查现有变量:
添加到变量
可以覆盖现有变量,而不用覆盖变量。 在PowerShell中,变量具有多种类型,包括字符串,整数和数组。 选择创建一个实质上具有多个值的变量时,必须确定是否需要用字符分隔的字符串或数组。 你可能不在乎任何一种方式,但是接收变量数据的应用程序可能会期望其中一种方式,因此请根据目标进行选择。
要将数据附加到字符串变量,请使用“ =”语法:
数组是PowerShell中的特殊类型的变量,需要ArrayList对象。 这超出了本文的范围,因为它需要更深入地研究PowerShell的.NET内部。
通过环境变量进入全局
到目前为止,本文中创建的变量都是本地变量,这意味着它们仅适用于你在其中创建的PowerShell会话。要创建其他进程可以访问的变量,可以创建环境变量,这将在以后的文章中介绍。