我想从我在变量中得到的字符串设置我的用户代理,但是还有其他一些选项,我想在同一个字符串中传递,所以这就是我最终的结果:
cookie="-b cookie -c cookie"
agent="My Bot"
opt="-A \"$agent\" $cookie"
curl http://example.com $opt
当我运行我的脚本时,它会获取网站,但它不会设置整个用户代理,而只会设置第一个空格之前的部分,然后再进行
curl: (6) Could not resolve host: Bot
我猜这些引号搞乱了,但是如果我用echo替换curl
这就是我看到的,这对我来说非常准确
http://example.com -A "My Bot" -b cookie -c cookie
我做错了什么?
答案 0 :(得分:1)
要处理空格,请在数组中正确存储参数,而不是字符串。
cookie=(-b cookie -c cookie)
agent="My Bot"
opt=(-A "$agent" "${cookie[@]}")
curl http://example.com "${opt[@]}"
我猜是有些东西弄乱了引号,但如果我用回声取代curl,这就是我所看到的,这对我来说似乎很准确。
echo
具有误导性。如果您想绝对确定,请使用set -x
。
$ set -x
$ curl http://example.com $opt
+ curl http://example.com -A '"My' 'Bot"' -b cookie -c cookie
了解它如何将"My Bot"
变为两个参数'"My'
和'Bot"'
?