0

在测试脚本中,我多次使用命令“curl”。为了优化代码,我希望“curl”选项在全局变量中执行。

我阅读了“curl”的使用条款,它说要传递包含空格的参数必须用单引号括起来。

但它不起作用。

$ curl_options="-i -L -k -S --connect-timeout 30 --user-agent 'Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14'"
$ curl $curl_options "http://google.com"

输出结果:

curl: (6) Couldn't resolve host'' Opera ' 
curl: (6) Couldn't resolve host '(Windows' 
curl: (6) Couldn't resolve host 'NT' 
curl: (6) Couldn't resolve host '6 .1; ' 
curl: (6) Couldn't resolve host 'WOW64)' 
curl: (6) Couldn't resolve host 'Presto' 
curl: (6) Couldn't resolve host 'Version'
4

1 回答 1

3

bash中,您应该使用数组。这样,您不必担心字符串中的空格是选项的一部分,还是分隔两个选项:

curl_options=( ... )
curl_options+=( "--user-agent" "Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14")

curl "${curl_options[@]}" "http://google.com"

如果您不能使用数组(例如,它们在您使用的 shell 中不可用),您将不得不回退到 using eval

$ curl_options="-i -L -k -S --connect-timeout 30 --user-agent 'Opera/9.80 (Windows NT 6.1; WOW64) Presto/2.12.388 Version/12.14'"
$ eval "curl $curl_options http://google.com"

这并不理想,因为您需要非常小心如何设置 的值curl_options,因为eval不知道值代表什么。shell 只是将值插入到传递给的字符串中eval,然后eval执行它。错别字可能会产生意想不到的后果。

于 2013-03-28T13:41:16.247 回答