【问题标题】:How do I pass a list of values to xargs as a single argument list?如何将值列表作为单个参数列表传递给 xargs?
【发布时间】:2013-07-03 16:24:41
【问题描述】:

我知道我可以使用xargs 获取文件列表并为每个文件运行一次命令。

我想做的是将文件列表作为单个参数列表传递给命令。例如:

ls | tail -10

输出

a
b
c
d

但我想将它传递给一个命令,该命令将接收如下列表:

command a b c d

我猜xargs 是完成这项工作的最佳工具,但我愿意接受任何事情。越容易记住越好。

【问题讨论】:

  • 使用command a b c d,列表不是单个参数,而是四个参数。可能你忘了写 list

标签: bash xargs


【解决方案1】:

只需使用引号和变量扩展:

command "$(ls | tail)"

测试(command):

#!/bin/bash
echo $1

输出:

 a b c d

【讨论】:

    【解决方案2】:

    只是

    ls|xargs command
    

    会的。当然,如果列表没有超过命令行长度限制,

    command `ls`
    

    也够了。

    【讨论】:

    • 如果 OP 真的希望文件名作为单个参数加入,这是不正确的。
    • 如果您阅读他的问题的标题和更正的问题,您会发现情况并非如此。
    【解决方案3】:

    你可以试试:

    command $(ls|tail -10|paste -s)
    

    如果你想有空格作为分隔符:

    command $(ls|tail -10|paste -s -d" ")
    

    xargs 还有一个-n 选项,你可以试一试。例如:

    kent$  seq 5 
    1
    2
    3
    4
    5
    
    kent$  seq 5|xargs -n5
    1 2 3 4 5
    

    【讨论】:

      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 2013-11-06
      • 2011-11-22
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 2018-06-03
      • 2021-06-01
      相关资源
      最近更新 更多