Shell脚本 - 如何将curl命令WITH变量存储到另一个变量中?

时间:2016-08-25 00:21:06

标签: shell curl

目前我有一个curl命令,我想存储在一个局部变量中。我知道我可以使用``或$()来完成它,但命令中的变量阻止我这样做。

local sample_mapping="$(curl -XGET '${search_host}/${index}/_mapping')"

其中search_host和index是先前设置的两个变量。此命令失败,因为Couldn't resolve host '$search_host'

其他帖子没有谈到在处理变量时该怎么做。任何人都有任何想法?

1 个答案:

答案 0 :(得分:3)

这是命令替换中的命令:

curl -XGET '${search_host}/${index}/_mapping'

此命令不能单独使用。您观察到的问题是由单引号引起的,而不是使用命令替换$(...)

在单引号内,变量不会扩展。由于您需要变量扩展,请使用双引号:

curl -XGET "${search_host}/${index}/_mapping"

将上述内容放在原始命令中:

local sample_mapping="$(curl -XGET "${search_host}/${index}/_mapping")"

请注意引号和命令替换可以嵌套:内部有双引号的事实命令替换对双引号外部没有影响的命令替换。

实施例

让我们定义一些变量:

$ search_host=http://google.com
$ index=index.html

现在,让我们尝试使用单引号命令:

$ a=$(curl -XGET '$search_host/$index')
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: $search_host

上述操作失败,出现类似于您观察到的错误消息:Could not resolve host: $search_host

让我们再试一次双引号:

$ a=$(curl -XGET "$search_host/$index")
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   229  100   

229    0     0    520      0 --:--:-- --:--:-- --:--:--   521

以上成功。