将变量传递给 stdin 上的命令时可以保留单引号吗?

M S*_*ker 1 bash stdin single-quotes

例子:

 $ foo="text with 'single quotes'"
 $ echo $foo
Run Code Online (Sandbox Code Playgroud)

给我

 text with 'single quotes'
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出,但我想传递$foo具有相同结果的标准输入。类似于以下之一:

 $ xargs echo <<< $foo

 $ echo $foo | xargs echo
Run Code Online (Sandbox Code Playgroud)

这两个都给我

 text with single quotes
Run Code Online (Sandbox Code Playgroud)

有没有办法保留单引号而不控制 foo 的内容?

我正在寻找一种无论命令如何都有效的解决方案,我选择它是xargs echo因为我认为它简单地显示了行为。该解决方案可能不存在,但如果有人有任何提示,将不胜感激!

Joh*_*ica 6

默认情况下 xargs 将解析引号和反斜杠。用于-d设置显式项目分隔符并禁用此行为,这是很少需要的。

$ xargs -d '\n' echo <<< "$foo"
text with 'single quotes'
Run Code Online (Sandbox Code Playgroud)