[英]Basic Windows 10 Powershell question on variable initializaton and passing arguments
我目前正在学习 Powershell 以及如何编写脚本来启动应用程序。 我借用并修改了以下代码片段以了解如何启动记事本。 我的问题是$args.Clone()
做什么或源自什么? (它来自具有不同路径和被定义/调用的可执行程序的原始代码。)我意识到变量 $myArgs 正在由右侧的 function 初始化到等号的左侧。 但是,我没有成功找到有关.Clone()
可以做什么的资源,所以我想我会在这里尝试询问。
顺便说一句,该脚本在启动 notepad.exe 并将文本文件命名为“pp”时工作。 如果该文件之前没有创建,它会询问我是否要将文本文件命名为“pp”。
$exePath = $env:NOTEPAD_HOME + '/Windows/notepad.exe'
$myArgs = $args.Clone()
$myArgs += '-pp'
$myArgs += $env:NOTEPAD_HOME
& $exePath $myArgs
tl;博士
您对$myArgs
的修改可以简化如下:
$myArgs = $args + '-pp' + $env:NOTEPAD_HOME
使用数组作为 LHS,运算符+
执行连接,即它附加到数组,但请注意,附加意味着在此过程中创建一个新数组,因为 arrays 是 .NET 中的固定大小数据结构。
无论如何都会隐式创建一个新数组这一事实使得在您的代码中调用.Clone()
是不必要的。
通常——在自动$args
变量的情况下——. .Clone()
方法是System.ICloneable
接口的实现。
.Clone()
的目的是创建 object 的副本(克隆),但是 - 正如BACON链接的答案所解释的那样 - 此操作的语义-浅(见下文)与深复制 - 没有规定,这就是为什么通常不鼓励使用System.ICloneable
的原因。
$args
是一个数组( System.Array
),对于 arrays, .Clone()
创建一个所谓的浅拷贝。 也就是说,数组元素的复制方式取决于它们是值类型的实例还是引用类型:
对于值类型元素,新数组将拥有原始数组元素数据的独立副本。
对于引用类型元素,新数组将具有原始数组元素引用的副本,这意味着 arrays 的元素都指向相同的数据(对象)。
有关值类型与引用类型的更多信息,请参阅此答案。
PowerShell 以使用+=
和+
时描述的方式隐式克隆 arrays 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.