在this about page中,有一個代碼塊(下面)顯示了$ForEach
自動變量,但它也具有類似批處理子例程的語法。我無法找到關於這段代碼如何工作或調用什麼語言結構的文檔。我相信這是一個PowerShell v5新增功能,但閱讀發行說明也沒有幫助我。 :tokenLoop foreach ($token in $tokens)
代表什麼?about_Foreach示例:PowerShell中的cmd子例程語法?
function Get-FunctionPosition {
[CmdletBinding()]
[OutputType('FunctionPosition')]
param(
[Parameter(Position = 0, Mandatory, ValueFromPipeline, ValueFromPipelineByPropertyName)]
[ValidateNotNullOrEmpty()]
[Alias('PSPath')]
[System.String[]]
$Path
)
process {
try {
$filesToProcess = if ($_ -is [System.IO.FileSystemInfo]) {
$_
}
else {
Get-Item -Path $Path
}
foreach ($item in $filesToProcess) {
if ($item.PSIsContainer -or $item.Extension -notin @('.ps1', '.psm1')) {
continue
}
$tokens = $errors = $null
$ast = [System.Management.Automation.Language.Parser]::ParseFile($item.FullName, ([REF]$tokens), ([REF]$errors))
if ($errors) {
Write-Warning "File '$($item.FullName)' has $($errors.Count) parser errors."
}
:tokenLoop foreach ($token in $tokens) {
if ($token.Kind -ne 'Function') {
continue
}
$position = $token.Extent.StartLineNumber
do {
if (-not $foreach.MoveNext()) {
break tokenLoop
}
$token = $foreach.Current
} until ($token.Kind -in @('Generic', 'Identifier'))
$functionPosition = [pscustomobject]@{
Name = $token.Text
LineNumber = $position
Path = $item.FullName
}
Add-Member -InputObject $functionPosition -TypeName FunctionPosition -PassThru
}
}
}
catch {
throw
}
}
}
你混合兩種結構討論;請參閱[about_break](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_break?view=powershell-5.1) –
因此,它是一個循環的標籤,可用於休息聲明。你知道這是否一直是PowerShell的一部分,或者添加了特定的版本@JeffZeitlin?我在約頁上找不到「這是在X中添加的」。 – TheIncorrigible1
@ TheIncorrigible1標籤自從v3.0版起就一直在ps(在v3語言規範中對它們進行了描述) –