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

Max*_*e.D 6 bash curl

我想curl用多个标题发出请求.解决方案是创建此命令:

curl -H "keyheader: value" -H "2ndkeyheader: 2ndvalue" ...
Run Code Online (Sandbox Code Playgroud)

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

headers='-H "keyheader: value" -H "2ndkeyheader: 2ndvalue" '
curl $headers
Run Code Online (Sandbox Code Playgroud)

发送

curl -H "keyheader: value" -H "2ndkeyheader: 2ndvalue"
Run Code Online (Sandbox Code Playgroud)

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

command unknown
Run Code Online (Sandbox Code Playgroud)

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

Ini*_*ian 14

您只需要使用数组而不是变量来传递引用的字符串.

declare -a curlArgs=('-H' "keyheader: value" '-H' "2ndkeyheader: 2ndvalue")
Run Code Online (Sandbox Code Playgroud)

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

curl "${curlArgs[@]}"
Run Code Online (Sandbox Code Playgroud)

为了更深入地了解为什么将变量中的参数设置失败,请参阅BashFAQ/050 - 我正在尝试将命令放在变量中,但复杂的情况总是会失败!