ForEach 真的是 ForEach-Object 的别名吗(Powershell)
Is ForEach really an alias of ForEach-Object (Powershell)
ForEach
被记录为 ForEach-Object
的别名。当我使用 Get-Alias ForEach
时,它告诉我它是 ForEach-Object
.
的别名
但是,
ForEach-Object
接受 Begin Process 和 End 等参数,其中 ForEach
不接受它们。
当我们调用 ForEach-Object
时,它会提示输入参数 Process,而在调用 ForEach
时,它会留下嵌套提示 >>
.
%
和 ForEach
行为相同,但 ForEach-Object
不同。
我的问题是:
ForEach
真的是ForEach-Object
的别名吗?
哪个更好,ForEach
还是ForEach-Object
?
请分享您的想法。
谢谢!
有两个不同的基础结构:
ForEach-Object
cmdlet
- 此 cmdlet 有一个内置的 别名 名称:
foreach
,恰好与不同 foreach
[=58] 的名称相匹配=]声明(见下一点)。
foreach
循环语句(类似于较少使用的for
语句)。
foreach
指的是什么取决于 解析上下文 - 请参阅 about_Parsing
:
在参数模式中(在命令的上下文中),foreach
是ForEach-Object
的别名.
在表达式模式(更严格地说:在这种情况下是语句模式),foreach
是foreach
循环语句.
作为 cmdlet,ForEach-Object
在 管道输入 .
- 使用它以 流式处理 方式处理来自其他命令的输出,一个对象一个对象,因为正在接收这些对象,通过自动
$_
变量.
作为语言语句,foreach
循环对变量和表达式[=103进行操作=](可能包括从命令收集的输出)。
使用它来有效地处理已经收集到内存中的结果,通过自选迭代器变量(例如,foreach ($num in 1..3) { ... }
中的 $num
); 这样做比 ForEach-Object
.
处理明显更快
请注意,您不能将 foreach
语句的输出直接发送到管道,因为 PowerShell 的语法不允许这样做;要将输出流式传输到管道,请将 foreach
语句包装在 & { ... }
中。 (相比之下,简单的表达式(例如,1..3
)可以直接发送到管道。
有关更多信息,性能比较和权衡(内存使用与性能)的讨论,包括.ForEach()
数组法,见.
ForEach
被记录为 ForEach-Object
的别名。当我使用 Get-Alias ForEach
时,它告诉我它是 ForEach-Object
.
但是,
ForEach-Object
接受 Begin Process 和 End 等参数,其中ForEach
不接受它们。当我们调用
ForEach-Object
时,它会提示输入参数 Process,而在调用ForEach
时,它会留下嵌套提示>>
.%
和ForEach
行为相同,但ForEach-Object
不同。
我的问题是:
ForEach
真的是ForEach-Object
的别名吗?哪个更好,
ForEach
还是ForEach-Object
?
请分享您的想法。
谢谢!
有两个不同的基础结构:
ForEach-Object
cmdlet- 此 cmdlet 有一个内置的 别名 名称:
foreach
,恰好与不同foreach
[=58] 的名称相匹配=]声明(见下一点)。
- 此 cmdlet 有一个内置的 别名 名称:
foreach
循环语句(类似于较少使用的for
语句)。
foreach
指的是什么取决于 解析上下文 - 请参阅 about_Parsing
:
在参数模式中(在命令的上下文中),
foreach
是ForEach-Object
的别名.在表达式模式(更严格地说:在这种情况下是语句模式),
foreach
是foreach
循环语句.
作为 cmdlet,ForEach-Object
在 管道输入 .
- 使用它以 流式处理 方式处理来自其他命令的输出,一个对象一个对象,因为正在接收这些对象,通过自动
$_
变量.
作为语言语句,foreach
循环对变量和表达式[=103进行操作=](可能包括从命令收集的输出)。
使用它来有效地处理已经收集到内存中的结果,通过自选迭代器变量(例如,
foreach ($num in 1..3) { ... }
中的$num
); 这样做比ForEach-Object
. 处理明显更快
请注意,您不能将
foreach
语句的输出直接发送到管道,因为 PowerShell 的语法不允许这样做;要将输出流式传输到管道,请将foreach
语句包装在& { ... }
中。 (相比之下,简单的表达式(例如,1..3
)可以直接发送到管道。
有关更多信息,性能比较和权衡(内存使用与性能)的讨论,包括.ForEach()
数组法,见