【发布时间】:2016-10-18 11:59:12
【问题描述】:
我写了一个简单的 bash 函数,它会从一个 ini 文件(由变量 CONF_FILE 定义)中读取值并输出它
getConfValue() {
#getConfValue section variable
#return value of a specific variable from given section of a conf file
section=$1
var="$2"
val=$(sed -nr "/\[$section\]/,/\[/{/$var/p}" $CONF_FILE)
val=${val#$var=}
echo "$val"
}
问题是它不会忽略 cmets,如果一个部分名称中的多个变量共享公共子字符串,它就会遇到麻烦。
示例 ini 文件:
[general]
# TEST=old
; TEST=comment
TEST=new
TESTING=this will be output too
PATH=/tmp/test
运行getConfValue general PATH 会按预期输出/tmp/test,但运行getConfValue general TEST 会显示此方法存在的所有问题。
如何解决?
我知道有专门的工具,如crudini 或用于 python、perl 和 php 的工具,但我不想为简单的配置文件解析添加额外的依赖项。包含 awk 而不是 sed 的解决方案也可以。
【问题讨论】: