我正在编写一个脚本来为给定的用户输入执行CURL命令。脚本有多个帮助函数来创建最终传递给CURL的参数列表(参数)。Bash,curl,eval和whitespace
一个剥离出来例子,如下:
#!/bin/bash
function create_arg_list
{
# THIS HTTP HEADER VALUE COMES FROM THE USER and MAY CONTAIN SPACES
local __hdr="x-madhurt-test:madh urt"
local __params="http://google.co.in -X GET -H '$__hdr'"
local __resultvar="$1"
eval $__resultvar="\"$__params\""
echo "params after eval : $__resultvar"
}
create_arg_list arg_list
echo "params after eval in main code : $arg_list"
echo "Running command : curl -v $arg_list"
curl -v $arg_list
脚本在他们的伟大工程时,输入参数(文件路径,网址等)都(引用)的空白。但是,当应该作为HTTP标题传递给CURL的参数包含空格时,脚本将失败。
这里是我试过:
- 周围使用标头值(例如 '$ __ HDR')单引号。但是,传递给CURL的值是:
curl -v http://google.co.in -X GET -H 'x-madhurt-test:madh urt'
,它被视为CURL,并且实际发送的头是这样的:'x-madhurt-test:madh
- 双转义标头值(例如\\“$ __ hdr \\“),但这似乎也起作用。在这种情况下,CURL将“urt”作为一个单独的参数并将其视为一个URL
curl: (6) Couldn't resolve host 'urt"'
- 转义标题值中的空格(即使用“madh urt”而不是“madh urt”),但事实证明与选项2相同。
有人对此处发生了什么问题有所了解吗?
仅供参考:我使用eval来返回变量来自以下文章:http://www.linuxjournal.com/content/return- values-bash-functions – madhurtanwani 2010-07-06 15:23:35