问题具体描述
- 目标:读取*.properties文件,获取里面的键值对。
- 遇到的问题:通过shell脚本读取*.properties文件时,由于其key-value格式分行存储,在linux中获取到的value值最后有一个\r参数(可以通过sh -x app.sh查看到),导致得到的值跟预期的不一致。
简单键值对
定义键值对pom.properties如下:
version=1.0
groupId=project.parent
artifactId=com.lxk.cms.admin.service
原始版本
- 这样写在控制台打印出来看着是很正常的,因为
\r
已被echo所处理,所以看不出什么,但输出到文本中每个值后边都会跟上
这样一个乱码。
. pom.properties
ver=$version
art=$artifactId
echo $ver
echo $art
优化版本
- 去除后边的
\r
后一切正常。
. pom.properties
ver=$(echo $version | sed 's/\r//')
art=$(echo $artifactId | sed 's/\r//')
复杂键值对
很多时候我们定义key的时候会想下面一样进行分组
,此时使用上面的所使用的.
进行加载键值对shell就会报错,那么我们可以使用grep
命令进行解决:
定义键值对pom.properties如下:
redis.ip=127.0.0.1
redis.port=6379
redis.db=8
写成一个函数,将所需的key传入即可,最后也须将\r
去除
prop(){
grep "${1}" pom.properties | cut -d'=' -f2 | sed 's/\r//'
}