如何在Bash脚本中读取带嵌套结构的.config配置文件
在Bash脚本中读取带分类的配置文件并实现类分类式访问
首先,你的配置文件.config内容如下:
category1 { Key1="value1" Key2="value2" } category2 { Key1="value1" Key2="value2" }
Bash本身不支持$category1.key1这种点语法的变量访问(变量名仅允许字母、数字、下划线),但可以通过两种方式实现类似的分类式配置项访问:
方法一:转换为下划线连接的全局变量
通过解析配置文件,将分类名与键名用下划线拼接成合法的Bash变量名,比如把category1.Key1转为category1_Key1,直接用变量名访问。
实现脚本:
#!/bin/bash # 解析配置文件到全局变量 parse_config() { local config_file="$1" local current_category="" while IFS= read -r line; do # 跳过空行和注释 [[ -z "$line" || "$line" =~ ^# ]] && continue # 匹配分类定义行(如category1 {) if [[ "$line" =~ ^([a-zA-Z0-9_]+)\s+\{$ ]]; then current_category="${BASH_REMATCH[1]}" # 匹配键值对行(如Key1="value1") elif [[ "$line" =~ ^\s*([a-zA-Z0-9_]+)\s*=\s*\"([^\"]*)\" ]]; then local key="${BASH_REMATCH[1]}" local value="${BASH_REMATCH[2]}" local var_name="${current_category}_${key}" # 导出为全局变量 export "$var_name"="$value" fi done < "$config_file" } # 加载配置文件 parse_config "./.config" # 测试访问配置项 echo "category1.Key1 = ${category1_Key1}" echo "category2.Key2 = ${category2_Key2}"
运行脚本后,即可通过${分类名_键名}的形式访问对应配置值。
方法二:使用关联数组(需Bash 4.0+)
为每个分类创建一个关联数组,将分类下的键值对存入对应数组,通过${分类名["键名"]}的形式访问,逻辑上更接近你想要的$category1.key1结构。
实现脚本:
#!/bin/bash # 检查Bash版本是否支持关联数组 if ((BASH_VERSINFO[0] < 4)); then echo "错误:该脚本需要Bash 4.0或更高版本" exit 1 fi # 解析配置文件到关联数组 parse_config() { local config_file="$1" local current_category="" while IFS= read -r line; do [[ -z "$line" || "$line" =~ ^# ]] && continue # 匹配分类定义行 if [[ "$line" =~ ^([a-zA-Z0-9_]+)\s+\{$ ]]; then current_category="${BASH_REMATCH[1]}" # 声明全局关联数组 declare -gA "$current_category" # 匹配键值对行 elif [[ "$line" =~ ^\s*([a-zA-Z0-9_]+)\s*=\s*\"([^\"]*)\" ]]; then local key="${BASH_REMATCH[1]}" local value="${BASH_REMATCH[2]}" # 给对应分类的关联数组赋值 eval "$current_category[\"$key\"]=\"$value\"" fi done < "$config_file" } # 加载配置文件 parse_config "./.config" # 测试访问配置项 echo "category1.Key1 = ${category1["Key1"]}" echo "category2.Key2 = ${category2["Key2"]}"
注意事项
- 两种方法都支持配置文件中的空行,若需要支持注释可保留脚本中的注释过滤逻辑。
- 关联数组方法需要Bash 4.0及以上版本,大部分现代Linux发行版默认已满足。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

