此问题在此处已有答案:
Why does shell ignore quoting characters in arguments passed to it through variables? [duplicate](3个答案)
10天前关闭。
我正在尝试执行bash脚本,但遇到以下错误:
curl: (3) URL using bad/illegal format or missing URL
curl: (3) unmatched close brace/bracket in URL position 1
我已经尝试了几种方法,比如在json中转义“,在curl请求中使用-g,在Req变量周围使用''而不是使用eval,但是我无法修复这个问题。
#!/bin/bash
filename="$1"
URL='http://localhost:8983/contentCleaner?action=clean'
while read -r requestParam; do
Req="curl ${URL} -X POST -H 'Accept:application/json' -H 'Content-Type:application/json' --data \"$requestParam\""
Res=eval $Req
echo "Res:$Res"
done < "$filename"
我作为param传递给bash命令的文件包含一个json数据列表,用新行分隔。bash脚本遍历json并填充curl请求。下面是一个请求的示例:
{ \"batchRequest\": { \"requests\": [ { \"contentData\": { \"contentText\": { \"ingestedContentSummary\": { \"provider\": { \"url\": \"twitter.com\" }, \"title\": \"Trump\" } } }, \"contentSource\": \"twitter\", } ] } }
1条答案
按热度按时间nvbavucw1#
**不要(尝试)将shell命令放在(标量)变量中。**它只适用于非常简单的情况,而你的情况并不简单。我们有 * 很多 * 关于这个问题的以前的问题,但不幸的是它们很难搜索。作为参考,请参见https://mywiki.wooledge.org/BashFAQ/050。
对于您的情况,只需执行正确的命令:
你不需要
-X POST
,因为所有的--data*
选项都会自动设置它。另外,〈$var(和〉$var〉〉$var〈〈$var〈〈〈$var)* 不 * 受单词拆分和全局匹配的影响,所以不需要双引号。(相反,"$requestParam"
作为一个命令参数需要双引号。)或者,由于您对结果所做的唯一事情就是输出带有前缀的结果,因此可以简化为
并且 if 每个主体都有一个换行符(就像您的输入文件一样),以进一步