如何在Shell脚本中从类INI文件提取变量并直接赋值
从类INI配置文件提取变量并直接赋值到Shell脚本
简洁可行的核心方案
直接用eval执行过滤后的目标赋值语句,这是最简洁的实现方式:
eval "$(grep '^variable1=' your-config-file)"
执行后,当前Shell环境里的variable1就会被设为配置文件中对应的value1。
为什么之前的方法失效
你之前用cat file | grep variable1 | sh不生效,是因为sh会启动一个子Shell执行这条赋值语句,赋值仅在子Shell内部有效,父Shell(你的脚本)根本无法获取这个变量。
更严谨的进阶方案(避免误匹配)
如果配置文件里存在注释或包含variable1的其他无关行,用awk做更精确的提取:
eval "$(awk -F= '/^variable1=/{printf "%s=\"%s\"", $1, $2}' your-config-file)"
这个命令会严格匹配以variable1=开头的行,同时给值加上引号,避免值包含空格等特殊字符时出现异常。
安全提醒
注意:eval会执行任何传入的命令,因此必须确保你的配置文件是完全可信的,避免其中包含恶意代码(比如variable1=$(rm -rf /))。如果配置文件来源不可控,建议采用你之前了解的字符串处理方式显式赋值,虽然稍显繁琐但安全性更高。
内容的提问来源于stack exchange,提问作者Louis Nichols
相关产品推荐
相关产品推荐

