MCPcopy Create free account
hub / github.com/astercloud/aster / expandVariables

Method expandVariables

pkg/config/loader.go:129–218  ·  view source on GitHub ↗

expandVariables 展开变量 支持的格式: - ${VAR_NAME} - 环境变量,如果不存在则为空 - ${VAR_NAME:-default} - 环境变量,带默认值 - ${VAR_NAME:?error message} - 环境变量,必须存在,否则报错 - $VAR_NAME - 简单环境变量引用

(content string)

Source from the content-addressed store, hash-verified

127// - ${VAR_NAME:?error message} - 环境变量,必须存在,否则报错
128// - $VAR_NAME - 简单环境变量引用
129func (l *Loader) expandVariables(content string) string {
130 // 匹配 ${VAR_NAME}, ${VAR_NAME:-default}, ${VAR_NAME:?error}
131 re := regexp.MustCompile(`\$\{([^}]+)\}`)
132
133 result := re.ReplaceAllStringFunc(content, func(match string) string {
134 // 去掉 ${ 和 }
135 inner := match[2 : len(match)-1]
136
137 // 检查是否有默认值或必需标记
138 var varName, defaultValue string
139 var required bool
140 var errorMsg string
141
142 if idx := strings.Index(inner, ":-"); idx != -1 {
143 // 有默认值
144 varName = inner[:idx]
145 defaultValue = inner[idx+2:]
146 } else if idx := strings.Index(inner, ":?"); idx != -1 {
147 // 必需变量
148 varName = inner[:idx]
149 required = true
150 errorMsg = inner[idx+2:]
151 } else {
152 varName = inner
153 }
154
155 // 添加前缀
156 fullVarName := varName
157 if l.envPrefix != "" {
158 fullVarName = l.envPrefix + varName
159 }
160
161 // 先检查自定义变量
162 if val, ok := l.variables[varName]; ok {
163 return val
164 }
165
166 // 再检查环境变量
167 val := os.Getenv(fullVarName)
168 if val == "" {
169 // 尝试不带前缀的变量名
170 val = os.Getenv(varName)
171 }
172
173 if val != "" {
174 return val
175 }
176
177 if required && val == "" {
178 // 返回错误标记,后续验证会捕获
179 return "__ERROR__: " + errorMsg
180 }
181
182 return defaultValue
183 })
184
185 // 处理简单的 $VAR_NAME 格式
186 simpleRe := regexp.MustCompile(`\$([A-Za-z_][A-Za-z0-9_]*)`)

Callers 8

TestExpandVariablesFunction · 0.95
LoadAgentConfigMethod · 0.95
LoadModelConfigMethod · 0.95
LoadFromStringMethod · 0.95

Implementers 1

Managerpkg/memory/rules/manager.go

Calls 1

IndexMethod · 0.80