如果您想将 .conf 文件限制为仅允许某些允许的模式,您可以执行以下操作:
eval `awk -v FS="=[\"]*" -v RS="[\"]*\n" '/^[A-Z0-9]+=/ { printf("export %s=\"%s\"; ", \$1, \$2); }' my_config_file.conf`;
awk scriptlet 中的正则表达式可以灵活或严格,类似于^((VAR1)|(VAR2)|(VAR3))=
.
.
仍用于“运行”分配,但仅从 .conf 文件运行“可接受”行。上面的模式过滤了所有看起来不像由大写字母和数字字符组成的变量的简单赋值的行。更高级的正则表达式可以允许更多的情况或灵活性。上面的 RS 表示忽略尾随引号。FS 说,如果在 = 之后有一个引号,那么它会被忽略。FS/RS 组合导致从值中去除引号。输出仅转换为语句,例如export VAR="VALUE"
.
This does not protect from "attacks" as the value is not parsed at all, but such filtering could be added easily enough.