如何在shell脚本读取properties文件后将键值对存入自定义变量
可行实现方案(纯POSIX sh兼容)
以下代码无需依赖bash等扩展shell特性,可直接在sh格式脚本中运行,自动读取properties配置并生成带指定前缀的变量:
#!/bin/sh # 配置项 CONFIG_FILE="thing.properties" # 变量前缀,可按需修改 VAR_PREFIX="thing" # 逐行读取处理配置文件 while IFS='=' read -r raw_key raw_value || [ -n "$raw_key" ]; do # 跳过空行、#开头的注释行 case "$raw_key" in ''|'#'*) continue ;; esac # 移除键两端的空白字符 key=$(printf '%s' "$raw_key" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//') # 移除值两端的空白字符、单引号、双引号 value=$(printf '%s' "$raw_value" | sed 's/^[[:space:]]*//; s/[[:space:]]*$//; s/^["'\'']//; s/["'\'']$//') # 动态赋值生成带前缀的变量 eval "${VAR_PREFIX}${key}='$(printf '%s' "$value" | sed "s/'/'\\\\''/g")'" done < "$CONFIG_FILE" # 验证示例,可删除 echo "thingUSERNAME = $thingUSERNAME" echo "thingPASSWORD = $thingPASSWORD" echo "thingDB_NAME = $thingDB_NAME"
功能说明
- 自动适配properties文件中等号两边的空格,自动去除值两端的单/双引号
- 自动跳过空行和
#开头的注释行 - 兼容配置文件末尾无换行的场景
注意事项
- 该方案仅适用于可信的内部配置文件,如果配置文件来源不可控,
eval会存在命令注入风险 - 变量前缀可按需修改
VAR_PREFIX变量调整,比如改成prod_就会生成prod_USERNAME这类变量
内容的提问来源于stack exchange,提问作者Adi Krish
相关产品推荐
相关产品推荐

