如何在一个变量中指定命令参数?

时间:2013-03-28 13:35:03

标签: bash shell curl

在测试脚本中这么多次我使用命令“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'

1 个答案:

答案 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执行它。错别字可能会产生意想不到的后果。