使用bash变量将多个标头传递给curl命令

时间:2017-09-27 14:03:15

标签: bash curl

我想用多个标头发出curl请求。解决方法是发出此命令:

curl -H "keyheader: value" -H "2ndkeyheader: 2ndvalue" ...

我的目标是只使用一个变量和所有标题,如:

headers='-H "keyheader: value" -H "2ndkeyheader: 2ndvalue" '
curl $headers

发送

curl -H "keyheader: value" -H "2ndkeyheader: 2ndvalue"

目前,问题是:我可以使用'"来声明我的字符串,但bash会尝试在"-H"之后运行command unknown 作为参数然后回答:

select item_1,item_2,count 
from (select t.*
      ,row_number() over(partition by case when item_1<item_2 then item_1 else item_2 end,
                                      case when item_1>item_2 then item_1 else item_2 end 
                         order by item_1) as rnum
      from tbl t
     ) t
where rnum=1

想知道这里出了什么问题。

1 个答案:

答案 0 :(得分:12)

你只需要使用一个数组而一个变量来传递引用的字符串。

declare -a curlArgs=('-H' "keyheader: value" '-H' "2ndkeyheader: 2ndvalue")

现在以这种方式完全传递这个数组,数组扩展(带双引号)处理双引号内的参数,以便在传递时不被分割。

curl "${curlArgs[@]}"

如需更深入了解为什么将变量中的参数设置失败,请参阅BashFAQ/050 - I'm trying to put a command in a variable, but the complex cases always fail!