Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将变量传递给stdin上的命令时是否可以保留单引号?_Bash_Stdin_Single Quotes - Fatal编程技术网

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

Bash 将变量传递给stdin上的命令时是否可以保留单引号?,bash,stdin,single-quotes,Bash,Stdin,Single Quotes,例如: $ foo="text with 'single quotes'" $ echo $foo 给我 text with 'single quotes' 这是我想要的输出,但我想在stdin上传递$foo,并得到相同的结果。类似于以下内容之一: $ xargs echo <<< $foo $ echo $foo | xargs echo 有没有办法在不控制foo内容的情况下保留单引号 我正在寻找一种不管命令如何都能工作的解决方案,我选择

例如:

 $ foo="text with 'single quotes'"
 $ echo $foo
给我

 text with 'single quotes'
这是我想要的输出,但我想在stdin上传递$foo,并得到相同的结果。类似于以下内容之一:

 $ xargs echo <<< $foo

 $ echo $foo | xargs echo
有没有办法在不控制foo内容的情况下保留单引号


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

您正在加倍解析,因此需要加倍引用

$: foo="text with \'single quotes\'"
$: xargs echo <<< "$foo"
text with 'single quotes'

现在额外的引号变得可见。

您正在加倍解析,因此需要加倍引用

$: foo="text with \'single quotes\'"
$: xargs echo <<< "$foo"
text with 'single quotes'

现在额外的引号变得可见。

默认情况下,xargs将解析引号和反斜杠。使用-d设置一个显式的项分隔符并禁用此行为,这是非常不可取的

$ xargs -d '\n' echo <<< "$foo"
text with 'single quotes'

默认情况下,xargs将解析引号和反斜杠。使用-d设置一个显式的项分隔符并禁用此行为,这是非常不可取的

$ xargs -d '\n' echo <<< "$foo"
text with 'single quotes'

如果希望xargs忽略引号,请尝试使用xargs标志xargs-0,如下所示:

foo="text with 'single quotes'"

echo $foo | xargs -0 echo
text with 'single quotes'

xargs -0 echo <<< $foo
text with 'single quotes'

如果希望xargs忽略引号,请尝试使用xargs标志xargs-0,如下所示:

foo="text with 'single quotes'"

echo $foo | xargs -0 echo
text with 'single quotes'

xargs -0 echo <<< $foo
text with 'single quotes'

我选择了这个命令,因为xargs echo是我正在运行的另一个命令的插入,所以这个命令最匹配。我更新了我的问题,让它更清楚!哈,尽管第二个代码块回答了这个问题,但我的具体问题的解决方案却证明了这个更一般的问题的答案是在每个“前”的某个\中使用相当于$foo的值。我选择了这个,因为xargs echo是我正在运行的另一个命令的一个插件,所以这个最匹配。我更新了我的问题,让它更清楚!哈,尽管第二个代码块回答了这个问题,但我的具体问题的解决方案却导致了这个更一般的问题,它是在每个“之前”的某个\中被sed成$foo。我已经更新了我的问题,因为我意识到它与我最初编写的问题一样是特定于xargs的,我并不打算这样做。不管怎样,这帮助我了解到,是命令应用了额外的解析,而不是我更新问题时固有的东西,因为我意识到这是我最初编写的xargs特定的,我并不打算这样做。不管怎样,这帮助我理解,是命令应用了额外的解析,而不是