作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 this about page ,有一个代码块(如下)展示了 $ForEach
自动变量,但它也有类似批处理子程序的语法。我找不到关于这段代码如何运行或调用什么语言结构的文档。我相信这是 PowerShell v5 的补充,但阅读发行说明对我也没有帮助。 :tokenLoop foreach ($token in $tokens)
是什么意思代表?
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
}
}
}
最佳答案
在 PowerShell 3.0 版及更高版本中(至少从 2.0 版开始),可以选择标记以下语句类型:
switch
foreach
for
while
do
break
的参数。或
continue
标记语句正文中的语句,并将流控制应用于标签指示的语句。
foreach($Name in 'Alice','Bob','Charlie'){
switch($Name.Length){
{$_ -lt 4} {
# We don't have time for short names, go to the next person
continue
}
default {
Write-Host "$Name! What a beautiful name!"
}
}
Write-Host "Let's process $Name's data!"
}
continue
在
Bob
的情况下, 但由于直接父语句是
switch
,它实际上并不适用于
foreach
陈述。
foreach
循环而不是 switch 语句,我们可以避免这种情况:
:outer_loop
foreach($Name in 'Alice','Bob','Charlie'){
switch($Name.Length){
{$_ -lt 4} {
# We don't have time for short names, go to the next person
continue outer_loop
}
default {
Write-Host "$Name! What a beautiful name!"
}
}
Write-Host "Let's process $Name's data!"
}
continue
语句实际上继续循环而不是切换。
break
一起简要讨论在
while
内
about_Break
help topic 中的声明
关于powershell - about_Foreach 示例 : cmd subroutine syntax in PowerShell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46077660/
在 this about page ,有一个代码块(如下)展示了 $ForEach自动变量,但它也有类似批处理子程序的语法。我找不到关于这段代码如何运行或调用什么语言结构的文档。我相信这是 Power
我是一名优秀的程序员,十分优秀!