Centos sh - 在执行命令中植入变量

时间:2018-05-03 14:17:44

标签: bash shell rest sh centos7

我刚接触到linux中的shell。

我正在尝试编写一个使用REST方法的shell脚本,并在grafana上创建一些数据源

我需要将网址模块化并从参数中获取。 这是我试图运行的那条线:

srv_url = "1.1.1.1:8080"

RESULT=$(/bin/curl --user admin:admin 'http://localhost:3000/api/datasources' -X POST -H 'Content-Type: application/json;charset=UTF-8' --data-binary '{"name":"Events","isDefault":false ,"type":"influxdb","url":"http://$srv_url","access":"proxy","basicAuth":false}')

你可以看到我正在尝试在里面设置变量$ srv_url(“url”:“http:// $ srv_url”),但它不会取其值,不管我尝试过该脚本使用的是文字名称,而不是它的值。

任何想法?

感谢。

1 个答案:

答案 0 :(得分:1)

字符串中的变量替换仅适用于双引号,而不是单引号。这意味着您必须转义字符串中的所有引号或使用单引号:

srv_url = "1.1.1.1:8080"

RESULT=$(/bin/curl --user admin:admin 'http://localhost:3000/api/datasources' -X POST -H 'Content-Type: application/json;charset=UTF-8' --data-binary "{\"name\":\"Events\",\"isDefault\":false ,\"type\":\"influxdb\",\"url\":\"http://$srv_url\",\"access\":\"proxy\",\"basicAuth\":false}")

或者,你可以通过结束单引号字符串并用双引号包装变量来做类似的事情:

RESULT=$(/bin/curl --user admin:admin 'http://localhost:3000/api/datasources' -X POST -H 'Content-Type: application/json;charset=UTF-8' --data-binary '{"name":"Events","isDefault":false ,"type":"influxdb","url":"http://'"$srv_url"'","access":"proxy","basicAuth":false}')

您可以在Bash here中阅读有关字符串和变量替换的更多信息。