如何在bash curl语句中包含'&'字符


97

我正在尝试使用bash中的curl下载网页,但是&URL中的符号并没有像我所希望的那样被解释为字符。关于如何使bash相信该符号&只是一个无聊的字符而没有什么特别的想法吗?


看看下面的话题这会帮助你- stackoverflow.com/questions/2067969/...
morgents

我试着更换&与符号\&'&'"&"^&但一直没能得到URL正确评价。实际上,'&'当我从Terminal.app运行curl命令时,该工程有效,但是当我将其放入bash脚本,将其包装成一个循环并运行时,该工程失败了。
Chernoff 2012年

Answers:


121

将整个URL用双引号引起来应该可以解决您的问题。


9
除非需要解析变量,否则单引号可能会更好。
2012年

当我在整个URL周围使用引号时,表达式${i}不会返回值。
Chernoff

2
就我而言,双引号失败,而单引号也可以。
abeboparebop

3
请谨慎使用什么程序键入引号。在急于编辑Shell脚本时,我使用了文本编辑程序。它使用斜引号而不是直双引号。这确实弄乱了脚本,使问题很难发现!
大卫

39
curl "http://www.example.com?m=method&args=1"

您是否将&用作GET URL的分隔符?还是在一条数据中?

如果在数据中,则必须将其编码为HTML字符,否则,请用引号引起来。

的编码&%26在URL中。

curl "http://www.example.com?m=this%26that

我将&符号用作数据,几乎完全与您所显示的一样。要注意的是,我使用的不是数字值${i}。因此,我想http://www.example.com?m=method&args=${i}评估为一个URL。
Chernoff 2012年

3
我刚刚显示URL的方式使用'&'作为GET变量的分隔符,所以现在我很困惑,在$ [i]中,您有一条包含'&'的数据?如果是这种情况,您将需要对其进行URL编码。&=%26
Matt Clark

1
搜索整个互联网找不到解决方案。@MattClark你是英雄。我只是对网址进行了url编码,并且这是一条数据,我的脚本工作正常。
Haris ur Rehman

1
在第二个代码段的末尾是否有缺少的“?”
David


13

您可以使用-d参数在POST请求中指定http url参数,而不必尝试使用转义“&”字符,如下所示:

curl -X POST http://www.example.com \
-d arg1=this \
-d arg2=that

如果请求是GET,则还应该添加-G选项,该选项告诉curl使用GET请求发送数据。

curl -X GET -G http://www.example.com \
-d arg1=this \
-d arg2=that

这是最好的答案!谢谢!
破门

这对我有用。添加双引号无效。
Juhog


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.