bash 读写布局异常的配置文件

bash reading and writing a config file with an unusual layout

问题 1 我有一个程序编写的配置文件,我想用 运行 终端中的脚本覆盖这些值。

配置文件的布局是这样的(这种格式可能有一个名称,但我不知道它是什么):

name_1 = "value1"
name_2 = "value2"
...

当我尝试读取脚本文件中的值时,我认为额外的 space 是导致问题的原因,因为每个名称都出现错误 "command not found"。

我是否可以将此文件包含在我的 bash 脚本中,以便它理解每一行都是一个变量?

问题 2 如何用相同的格式覆盖该文件中单行的值?配置文件中的引号让我感到困惑,还有=符号前后的space。

下面的方法行得通吗?

CONFIG_FILE=test.cfg
TARGET_KEY=$"name_1 "
REPLACEMENT_VALUE=" "true" "
sed -i "s/\($TARGET_KEY *= *\).*/$REPLACEMENT_VALUE/" $CONFIG_FILE

对于第一个问题,预处理您的 .cfg 文件然后读取它,如下所示:

CONFIG_FILE=test.cfg
sed 's/ = /=/g' < test.cfg > /tmp/processed.cfg
. /tmp/processed.cfg

现在,您的所有 name_1name_2 对都将可用于您的 shell 脚本。

第二个问题,这样答:

CONFIG_FILE=test.cfg
TARGET_KEY='name_1 '
REPLACEMENT_VALUE='"true" '
sed -i -e "s/\($TARGET_KEY *= *\).*/$REPLACEMENT_VALUE/" $CONFIG_FILE