簡體   English   中英

在Powershell中調用函數時,使用與參數和存儲相同的變量

[英]Using the same variable as parameter and storage when calling a function in powershell

最近我有這個問題。 經過大量的研究,終於發現問題出在以下方面:

  • 存儲函數返回的值
  • 將其作為參數傳遞給函數

因此考慮到以下功能:

Function Create-Filter($filter)
{    
    $filter.Split(',') | ForEach-Object {"*.$($_.Trim())"}
    return
}

(以上函數獲取字符串變量,例如“ csproj,vbproj”,並將其轉換為* .csproj * .vbproj)

...下面的代碼不起作用,用於-include參數的變量$ filter不喜歡Get-ChildItem,它什么也不返回:

$filter = "csproj, vbproj"
$filter = Create-Filter ($filter)
Get-ChildItem "D:\Path\To\My\Root\Folder" -Include $filter -Recurse

相反,下面是通過使用其他變量來存儲並將其作為參數傳遞的方法:

$filter = "csproj, vbproj"  
$formattedfilter = Create-Filter ($filter)
Get-ChildItem "D:\Path\To\My\Root\Folder" -Include $formattedfilter -Recurse

...現在,Get-ChildItem起作用了。

在其他語言中,可以使用相同的變量將其作為參數傳遞並存儲該函數返回的值。 那么,您能否解釋一下為什么在Powershell中如果使用相同的變量卻不起作用?

不確定代碼為什么不起作用,因為這種情況下的返回是多余的,並且結果將放在輸出流中。

因此,相同的代碼但經過了重構:

function New-Filter
{    
    param (
        [Parameter(Mandatory=$true)]
        [String[]] $filter
    )

    return $filter.Split(',') | ForEach-Object {"*.$($_.Trim())"}
}

$filter = @("csproj, vbproj")
$filter = New-Filter $filter
Get-ChildItem -Path "D:\Path\To\My\Root\Folder" -Include $filter -Recurse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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