带引号的var带引号的var

时间:2018-05-20 23:01:16

标签: bash curl

我想从我在变量中得到的字符串设置我的用户代理,但是还有其他一些选项,我想在同一个字符串中传递,所以这就是我最终的结果:

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

我做错了什么?

1 个答案:

答案 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"'