目前我有一个curl命令,我想存储在一个局部变量中。我知道我可以使用``或$()来完成它,但命令中的变量阻止我这样做。
local sample_mapping="$(curl -XGET '${search_host}/${index}/_mapping')"
其中search_host和index是先前设置的两个变量。此命令失败,因为Couldn't resolve host '$search_host'
其他帖子没有谈到在处理变量时该怎么做。任何人都有任何想法?
答案 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
以上成功。