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

无需修改test.conf的Python实现bash配置变量替换方案

纯Python实现bash风格配置文件变量替换方案

实现思路

  • 逐行读取配置文件,自动过滤空行和bash风格注释行,兼容现有配置格式无需修改
  • 先提取所有KEY=VALUE格式的键值对存入字典,保留原始值
  • 迭代匹配${变量名}格式的占位符,用已解析的变量值替换,直到所有占位符处理完成,支持多层变量嵌套引用
  • 完全原生Python实现,无需依赖外部子进程调用bash

示例代码

import re

def parse_bash_conf(file_path):
    # 匹配${VAR}格式的变量引用,需要支持$VAR格式可修改正则规则
    var_pattern = re.compile(r'\$\{(\w+)\}')
    conf_dict = {}
    
    # 第一步:读取所有原始键值对
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            line = line.strip()
            # 跳过空行和注释行
            if not line or line.startswith('#'):
                continue
            key, value = line.split('=', 1)
            conf_dict[key.strip()] = value.strip()
    
    # 第二步:替换所有变量引用,加最大迭代次数避免循环引用死循环
    updated = True
    max_iter = 10
    iter_count = 0
    while updated and iter_count < max_iter:
        updated = False
        iter_count += 1
        for key, value in conf_dict.items():
            matches = var_pattern.findall(value)
            for var in matches:
                if var in conf_dict:
                    value = value.replace(f'${{{var}}}', conf_dict[var])
                    updated = True
            conf_dict[key] = value
    
    return conf_dict

# 调用测试
if __name__ == '__main__':
    conf = parse_bash_conf('test.conf')
    print(conf)
    # 输出结果:{'IP_BASE': '10.22.1', 'IP_NET': '10.22.1.0', 'IP_HOST': '10.22.1.1'}

方案优势

  • 无需修改现有test.conf的任何内容,完全兼容原有bash格式
  • 无外部依赖,执行效率高于调用subprocess启动bash进程的方案
  • 可扩展性强,需要支持其他bash变量语法(如默认值、无大括号的$VAR格式)只需调整正则匹配和替换逻辑即可

内容的提问来源于stack exchange,提问作者Fang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:42:01