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