2016-07-15 154 views
0

我正在尝试在bash脚本内执行cURL命令以发布到URI。该命令要求其中一个参数被双引号和单引号括起来,即'"jsimmons"'在我的脚本中,但是这个参数是一个变量,所以命令一直失败,我相信这是因为变量做了一些奇怪的扩展,并且命令丢失了引号必要。用多个引号扩展bash变量?

对于我当前的尝试,这是行不通的,参数看起来像'""$watcher""',因为我试图展开该变量并将该字符串放在双引号和单引号内。

如何正确地扩展我的变量以满足命令的要求?

+2

ATLEAST粘贴代码的相关部分,你所面临的 – Fazlin

+1

XY错误问题:你是否试图对字符串“jsimmons”进行JSON编码? – chepner

+0

如果最外层的引号是单引号,那么当前shell将不会扩展字符串内的变量引用。单引号字符串中没有转义字符。下一个单引号无条件地结束字符串,不管反斜杠或任何其他“转义”字符。 –

回答

2

如果你在整个命令周围有双引号,你可以毫无困难地插入单引号,但是需要加双引号。

例如:

$ watcher=jsimmons 
$ echo "'\"$watcher\"'" 
'"jsimmons"' 
+2

我怀疑单引号实际上并不必要,除了确保双引号逐字传递之外。 – chepner

0

可以逃避周围' S和" s的\

\'\"$watcher\"\'

+0

你期望'\''做什么? –

+0

如果它们未被转义,'$ watcher'变量不会被扩展,因此它会导致'\“$ watcher \”'。 ''''也不会扩大,因为“在单引号内,除'''之外的每个特殊字符都被字面解释,”http://tldp.org/LDP/abs/html/quotingvar.html – Kyriakos