gpt4 book ai didi

powershell - PowerShell 中的 xargs 相当于什么?

转载 作者:行者123 更新时间:2023-12-02 22:18:43 26 4
gpt4 key购买 nike

POSIX-defined xargs command 获取从标准输入接收的所有项目,并将它们作为命令行参数传递给它在自己的命令行上接收的命令。例如:grep -rn "String" | xargs rm .

PowerShell 中的等效项是什么?

以下问题都问这个:

但是没有正确答案,因为所有答案要么使用 ForEach-Object ,它将一次处理一个项目(例如 xargs -n1 ),从而获得给定示例的所需结果,或者将中间结果存储在变量中,这会冒犯我的功能命令行。

最佳答案

我发现有两种方法。第一个可能是更惯用的 PowerShell,第二个更符合 xargs 基于管道的精神。

举个例子,假设我们想要将所有猫的图片传递给 myapp.exe

方法#1:命令替换

您可以通过将管道嵌入到命令字符串中来执行类似于在 sh 中使用 $(命令替换) 的操作:

&"myapp.exe" @(Get-ChildItem -Recurse -Filter *.jpg | Another-Step)

@(...) 根据其内部的命令创建一个数组,PowerShell 会自动将传递给 & 的数组扩展为单独的命令行参数。

但是,这并不能真正回答问题,因为只有当您可以控制要传递到的命令时它才会起作用,但情况可能并非如此。

方法#2:真实管道

您还可以通过使用子表达式来传递对象、将它们收集到数组中,然后将该数组传递给最终命令来构造“双管道”。

,@(Get-ChildItem -Recurse -Filter *.jpg | Another-Step) | %{&"myapp.exe" $_}

像以前一样,@(...) 将项目收集到一个数组中,然后将该数组通过管道传输到使用 % (ForEach-Object)。通常,这会单独循环遍历每个项目,因为 PowerShell 在通过管道传输时会自动展平数组,但可以通过在前面添加 , 运算符来避免这种情况。然后像平常一样使用 $_ 特殊变量来嵌入传递的数组。

所以关键是将要收集的管道包装在 ,@(...) 中,然后通过管道将其传输到 %{...} 中的内容>.

关于powershell - PowerShell 中的 xargs 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36428949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com