我正在使用 curl 从GraphQL API获取项目。我需要发送商品名称以获取其ID作为响应。当名称只是一个单词时,这种方法可以正常工作,但是当它包含空格时,我似乎无法使其正常工作。
itemName="Variable with blank spaces"
curl -X POST -data '{"query": "{getItems(jql: \"text ~ '$itemName'\") {results {id}}"}'
如何在上面的查询中转义$ itemName
答案 0 :(得分:1)
您必须转义'
。因此,结束引号'
转义单\'
,然后添加项目"$itemName"
,然后添加单引号\'
,然后重新开始单引号'
。
curl -X POST -data '{"query": "{getItems(jql: \"text ~ '\'"$itemName"\''\") {results {id}}"}'
或使用"
:
curl -X POST -data "{\"query\": \"{getItems(jql: \\\"text ~ '$itemName'\\\") {results {id}}\"}"
答案 1 :(得分:1)
在任何{shell中,'
分隔的字符串或脚本中都不能包含'
。尝试进行任何逃逸都不会使其起作用。期。因此,要使'
出现在命令行中,您需要脱离封闭的'
,提供一个'
,然后再回到其中以继续其余的操作'
分隔的字符串/命令。
将'
转换为字符串的通常语法是在需要'\''
的任何地方使用'
,例如:
str='foo'\''bar'
将变量str
设置为foo'bar
。
因此,在您的命令行中,您将使用以下命令来获取'
:
curl -X POST -data '{"query": "{getItems(jql: \"text ~ '\''$itemName'\''\") {results {id}}"}'
,但是您还需要让shell展开$itemName
,您还需要打破'
的使用,并在返回shell时也将双引号括起来,以免出现泛滥和扩展(请参见https://mywiki.wooledge.org/Quotes)。您可以这样写:
curl -X POST -data '{"query": "{getItems(jql: \"text ~ '\'''"$itemName"''\''\") {results {id}}"}'
但是我们得到一个'
-pileup,它可以立即两次进入/退出shell,这是没有必要的-只需留在shell中,然后在其中扩展变量即可。因此,您可以将其减少为:
curl -X POST -data '{"query": "{getItems(jql: \"text ~ '\'"$itemName"\''\") {results {id}}"}'
或者,因为\'
与"'"
相同:
curl -X POST -data '{"query": "{getItems(jql: \"text ~ '"'$itemName'"'\") {results {id}}"}'