在测试脚本中这么多次我使用命令“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'
答案 0 :(得分: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中不可用),你将不得不回到使用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
执行它。错别字可能会产生意想不到的后果。