【问题标题】:how to group all arguments as position argument for `xargs`如何将所有参数分组为`xargs`的位置参数
【发布时间】:2020-03-18 21:55:45
【问题描述】:

我有一个脚本,它只接受一个位置参数,它是一个值列表,我正在尝试使用 xargs 从标准输入获取参数。

但是,默认情况下,xargs 将所有列表作为位置参数传递给我的脚本,例如做的时候:

echo 1 2 3 | xargs myScript,本质上是myScript 1 2 3,而我正在寻找的是myScript "1 2 3"。实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: shell command-line xargs


    【解决方案1】:

    更改分隔符。

    $ echo 1 2 3 | xargs -d '\n' printf '%s\n'
    1 2 3
    

    虽然不是所有的 xargs 实现都有-d

    不确定是否有实际的用例,但如果需要,您也可以求助于生成另一个 shell 实例。喜欢

    $ echo -e '1 2\n3' | xargs sh -c 'printf '\''%s\n'\'' "$*"' sh
    1 2 3
    

    【讨论】:

      【解决方案2】:

      如果输入可以更改,您可以这样做。但不确定这是否是您想要的。

      echo \"1 2 3\"|xargs ./myScript
      

      这是一个例子。

      $ cat myScript 
      #!/bin/bash
      
      echo $1; shift
      echo $1; shift
      echo $1;
      
      $ echo \"1 2 3\"|xargs ./myScript
      1 2 3
      
      
      $ echo 1 2 3|xargs ./myScript
      1
      2
      3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-03
        • 2018-03-30
        • 1970-01-01
        • 2023-02-10
        • 2019-03-29
        • 2017-02-28
        • 2021-10-17
        • 1970-01-01
        相关资源
        最近更新 更多