我有一个包含以下属性的属性文件,
apache_ip=127.0.0.1
apache_user=root
现在在我的shell脚本中,我做了类似下面的事情,
source $1
service=$2 #$2=apache
variable=${service}_ip
serviceIP=${variable}
echo ${serviceIP}
我希望输出为 127.0.0.1 ,但输出为 apache_ip
我尝试了不同的组合,但它有效。如何连接两个变量并使用该变量从属性文件中获取值。
答案 0 :(得分:2)
service="apache"
apache_ip="127.0.0.1"
variable="${service}_ip"
ip="${!variable}"
echo "$ip"
打印127.0.0.1。
查看here以获取有关bash shell中shell参数扩展的更多信息。
如果参数的第一个字符是感叹号(!),和 参数不是nameref,它引入了一个变量级别 间接。 Bash使用从其余部分形成的变量的值 参数作为变量的名称;那么这个变量就是 扩展,该值用于替换的其余部分, 而不是参数本身的价值。这被称为间接的 扩张。如果参数是nameref,则会扩展为名称 参数引用而不是执行完整的变量 间接扩张。
答案 1 :(得分:0)
如果要从配置文件中获取值,可以使用grep
:
configfile=$1
service=$2
serviceIP=$(grep "^${service}_ip=" configfile|cut -d= -f2-)
echo "serviceIP=${serviceIP}"
在配置文件来源时你可以做同样的事情:
serviceIP=$(set | grep "^${service}_ip=" |cut -d= -f2-)
echo "serviceIP=${serviceIP}"