使用 awk 解析配置文件

Using awk to parse a config file

我正在尝试制作一个 awk 命令,它将整个配置文件存储为变量。

配置文件采用以下形式(键永远不会有 spaces,但值可能有):

key=value
key2=value two

而我的 awk 命令是:

$(awk -F= '{printf "declare %s=\"%s\"\n", , }' $file)

运行 这个没有外部子外壳 $(...) 的结果是我想要打印的确切命令,所以我的问题不是关于 awk,更多的是关于我如何 运行 awk 作为命令的输出。

命令的计算结果为:

declare 'key="value"'

这有点问题,因为双引号与值一起存储。更糟糕的是,当引入 space 时,会导致:

declare 'key2="value' two"

当然,我不能删除引号或多字值导致问题。

我已经尝试了几乎所有我能找到的解决方案,例如 set -fevalsystem()

您不需要为此使用 Awk,但可以使用可用的内置插件来执行此操作。使用输入重定向正确读取配置文件

#!/bin/bash

while IFS== read -r k v; do
    declare "$k"="$v"
done < config_file

并将文件来源为

$ source script.sh
$ echo "$key"
value
$ echo "$key2"
value two

如果 source 不明确可用,POSIX 的唯一方法是

. ./script.sh