You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:55:24