使用awk解析配置文件

时间:2017-06-09 09:11:51

标签: bash awk subshell

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

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

key=value
key2=value two

我的awk命令是:

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

在没有外部子shell $(...)的情况下运行它会产生我想要打印的确切命令,所以我的问题不是关于awk,而是关于如何将awk的输出作为命令运行。

该命令的计算结果为:

declare 'key="value"'

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

declare 'key2="value' two"

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

我已经尝试了我能找到的大多数解决方案,例如set -fevalsystem()

1 个答案:

答案 0 :(得分:3)

您不需要使用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