我试图制作一个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 -f
,eval
和system()
。
答案 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