簡體   English   中英

關於變量初始化和傳遞 arguments 的基本 Windows 10 Powershell 問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM