【问题标题】:use whitespace as delimiter for xargs arguments使用空格作为 xargs 参数的分隔符
【发布时间】:2025-11-25 22:35:01
【问题描述】:

是否可以将带有空格的字符串传递给 xargs 并使用每个 word 作为参数?

例如,我正在尝试这样的事情。但是这两个词都被视为一个参数。

echo foo bar | xargs -I {} sh -c 'echo item: {}' 

我想使用 shell 而不是 bash。否则,我认为数组可能会有所帮助,但它们在 shell 中不存在。

【问题讨论】:

    标签: shell xargs


    【解决方案1】:

    您可以使用-d 选项来指定分隔符:

    echo 'foo bar' | xargs -I {} -d ' ' sh -c 'echo item: {}'
    

    将导致:

    item: foo
    item: bar
    

    --delimiter=delim, -d delim
    输入项以指定字符结束。指定的分隔符可以是单个字符、C 样式的字符转义(例如 \n)或八进制或十六进制转义码。八进制和 十六进制转义码被理解为 printf 命令。不支持多字节字符。在处理输入时,引号和反斜杠并不特殊;中的每个字符 输入是从字面上理解的。 -d 选项禁用任何文件结尾字符串,它被视为任何其他参数。当输入仅由换行符分隔的项目组成时,您可以使用此选项, 尽管在可能的情况下将程序设计为使用 --null 几乎总是更好。

    【讨论】:

    • 我什至在手册页中阅读了 2-3 次,但没有发现这一点。那里写得很清楚。 --delimiter=delim, -d delim ...