bash脚本中的卷曲命令问题,因为包含引号的字符串变量

时间:2019-03-20 18:05:06

标签: bash curl

我正在bash脚本中执行curl命令。

问题在curl命令中,我必须传递一些变量($ summary,$ description)。 但是由于这些变量在单引号(')中,因此未分配变量。

仅供参考:我无法删除单引号,也无法替换为双引号。

我该如何克服这种情况。

卷曲命令:

curl -X POST -d '{"summary": "$summary",  "description": "$description", "moduleMapAssets": [{"name":"Rates | IRD"},{"name":"CRD | CRD"}]}' -H "Content-Type: application/json"

2 个答案:

答案 0 :(得分:2)

您可以(并且必须)使用双引号,只需要转义字符串中包含的双引号即可:

curl -X POST -d "{\"summary\": \"$summary\",  \"description\": \"$description\", \"moduleMapAssets\": [{\"name\":\"Rates | IRD\"},{\"name\":\"CRD | CRD\"}]}" -H "Content-Type: application/json"

正如@MikeHolt在评论中指出的,也可以在单个字符串中混合使用引号样式,因此您可以在包含文字双引号的单引号部分和包含文字双引号的双引号部分之间来回切换变量引用:

curl -X POST -d '{"summary": "'"$summary"'",  "description": "'"$description"'", "moduleMapAssets": [{"name":"Rates | IRD"},{"name":"CRD | CRD"}]}' -H "Content-Type: application/json"

对此进行更详细的说明:... '{"summary": "'"$summary"'", "description"...'被解析为单引号的部分'{"summary": "'(其中双引号是文字),紧随其后的是双引号的部分{ {1}}(在其中扩展变量),然后紧跟另一个单引号的节"$summary"等。由于这些节之间没有空格,因此它们被视为{{1}的一个长参数}。

顺便说一句,如果您的任何变量本身都可以包含双引号或反斜杠,则事情将变得更加复杂。如果可能出现这种情况,则应使用'", "description"...'之类的东西来创建字符串。像这样:

curl

答案 1 :(得分:-3)

尝试在单引号上使用反斜杠

curl -X POST -d \'{"summary": "$summary",  "description": "$description", "moduleMapAssets": [{"name":"Rates | IRD"},{"name":"CRD | CRD"}]}\' -H "Content-Type: application/json"