使用 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 -f
、eval
和 system()
。
您不需要为此使用 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
我正在尝试制作一个 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 -f
、eval
和 system()
。
您不需要为此使用 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