出于某种原因,当 ForEach 别名工作正常时,当使用 ( $Thing in $Things) 语法时, ForEach-Object 的 % 别名会引发异常。
这里有两个例子:
使用 % 别名:
$ints = @(1, 2, 3, 4, 5)
% ($i in $ints)
{Write-Host $i}
Run Code Online (Sandbox Code Playgroud)
这将失败并在表达式或语句中出现错误 Unexpected token 'in'。
使用 ForEach 别名:
$ints = @(1, 2, 3, 4, 5)
foreach ($i in $ints)
{Write-Host $i}
Run Code Online (Sandbox Code Playgroud)
这毫无问题地成功。
如果它们都是 ForEach-Object 的别名,为什么会有区别?
jsc*_*ott 14
这是两件不同的事情:
%是小命令的别名ForEach-Object和foreach是还小命令的别名ForEach-Object......并且 foreach是循环语句这不与流水线工作。
如所写,您的第一个命令扩展为:
ForEach-Object ($i in $ints) {
Write-Host $i
}
Run Code Online (Sandbox Code Playgroud)
...这不是有效的语法 ForEach-Objectcmdlet 的。
当foreach出现时,与您的第二个命令一样,它被解释为foreach statement,而不是 cmdlet 别名。在这种情况下,语法是如预期有效和循环。
您可以使用get-help about_Foreach和比较差异get-help ForEach-Object。这篇博文Essential PowerShell:Understanding foreach也做了很好的解释。
| 归档时间: |
|
| 查看次数: |
2972 次 |
| 最近记录: |