bash脚本中的curl请求,需要在URL中使用美元符号

时间:2017-07-13 20:39:53

标签: linux bash curl escaping urlencode

我遇到了一个我似乎无法解决的问题。

我需要向给定的网址发出curl请求,并且该网址需要一个美元符号。

所以,例如:

  

www.example.com/mypath/function&$filter=whatever

现在,如果我将URl放在单个刻度中,或者如果我用反斜杠转义美元符号,然后将其放在双引号中,我可以从命令行执行此操作。

显然,如果您不执行上述任何一项操作,则会出现问题,因为bash会看到' $'并将其后的任何内容解释为变量名称。

所以,当我尝试:

URL="www.example.com/mypath/function&\\\$filter=whatever"
MYOUTPUT=$(curl -s --header "Authorization: $HEADER" "$URL")

它无法正常工作。

当我尝试

URL="www.example.com/mypath/function&\$filter=whatever"
MYOUTPUT=$(curl -s --header "Authorization: $HEADER" "'$URL'")

它无法正常工作。

我做错了什么?

我可以告诉它无法正常工作,因为服务器在脚本中的响应方式与在命令行中的响应方式不同。如果查询没有正确完成,网站会以某种默认方式响应,我总是通过脚本获得默认响应。

1 个答案:

答案 0 :(得分:2)

如果您在字符串中放置文字$,bash将不会尝试在将来的扩展中解释它:

URL='www.example.com/mypath/function&$filter=whatever'
MYOUTPUT=$(curl -s --header "Authorization: $HEADER" "$URL")