前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux/shell:读取包含'.'键名的.properties文件

linux/shell:读取包含'.'键名的.properties文件

作者头像
10km
发布2019-07-02 13:44:24
3.3K0
发布2019-07-02 13:44:24
举报
文章被收录于专栏:10km的专栏10km的专栏10km的专栏

如果properties中的key名只是由字母数字组成,那读取properties中的property很简单,示例如下:

假设.properties中内容为:

prop1.properties

username=tom

读取prop1.properties中的username

. prop1.properties
echo $username

但是如果key的名字包含了.(比如redis.port),这个办法就不能用了,因为linux shell中不允许变量名有.符号。

网上找到这篇文章 《linux – 如何读取包含使用Shell脚本具有句点字符的键的.properties文件 ,提供了另一种解决办法,就是以文本方式读取properties文件,解析每一行=号两边的内容,将key中的.替换为_.但是这篇文章提供的脚本有一个漏洞:就是没有处理注释符号#.所以容易会带来逻辑隐患。所以在这篇文章提供的脚本的基础我改进了一下,对于以#起始的行不处理。

实现代码如下:

#!/bin/bash
config="$HOME/your.properties"
if [ -f "$config" ]
then
	echo "$config found."
	while IFS='=' read -r key value
	do
		## '.'替换为'-'
		key=$(echo $key | tr '.' '_')
		## 不处理注释符#起始的key
		[[ -z $(echo "$key" | grep -P '\s*#+.*' ) ]] \
			&& eval "${key}='${value}'"  \
			&& echo key=$key value=$value
	done < "$config"
else
	echo "$config not found."
fi

另一个简单的实现是这样的:

#!/bin/bash
config="$HOME/your.properties"
# 定义一个函数从properties文件读取key
function prop {
	[ -f "$config" ] && grep -P "^\s*[^#]?${1}=.*$" $config | cut -d'=' -f2
}

# 调用示例
echo redis.port=$(prop "redis.port")
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年06月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档