【问题标题】:Why does piping a string with literal quotes to xargs make them disappear?为什么将带有文字引号的字符串传递给 xargs 会使它们消失?
【发布时间】:2026-01-25 05:25:01
【问题描述】:

我正在编写包含链式printf 管道的 bash 脚本。 (成像构造 JSON 对象)

我的用法是这样的:
printf \"abc\" | xargs printf
结果是 abc 不带引号。如果我想在第二个 printf 输出中保留引号,我需要做什么?

【问题讨论】:

  • 请注意,这是使用xargs 而不使用-0-d 通常是个坏主意的原因之一。

标签: shell unix xargs


【解决方案1】:

这是xargs 的行为与文档一致;它实现了类似 shell(但不是严格兼容 shell)的解析和引号删除。

GNU 和 BSD 平台都有超出 POSIX 基线的扩展,可让您禁用此功能。

在具有任一 GNU 或 BSD 扩展的系统上,使用 -0 并使用 NUL 分隔您的输入:

printf '%s\0' \"abc\" | xargs -0 printf

使用 GNU xargs,您可以使用 -d 指定要使用的分隔符 -- 换行符有效的上下文:

printf '%s\n' \"abc\" | xargs -d $'\n' printf

【讨论】:

    最近更新 更多