如何导入配置文件变量,但使用其他分隔符?

时间:2019-06-26 07:00:14

标签: bash ubuntu-16.04

首先,source.无法正常工作,因为我使用的是另一种分隔符,就像这样。

我尝试了几种可以谷歌搜索的方法,但到目前为止没有任何运气。
我设法正确打印了所有变量和值,但是在此bash进程中无法将其存储为变量。

我想要什么:

在bash进程结束时,我“回显$ HUA_IP:”
它应该按照config.cf文件给我“ 192.168.0.1”。

文件config.cf:

  "HUA_PASSWORD": "admin",
  "HUA_IP": "192.168.0.1"

我的bash文件是:

#!/bin/bash

configFile="/opt/config.cf"
# config="`cat $configFile`"
# echo $config
# source $configFile
# echo $var1
# conf="";

while read var value
do
    # export "$var"="$value"
    var="${var%:*}"
    var="${var//\"/}"
    var="${var//[\}\{]/}"
    value="${value//\"/}"
    value="${value//,/}"
    # echo "var :'"$var"'"
    # echo "value :'"$value"'"

    if [ !$var = "" ]
    then
        # "$var"="$value"
        # eval $var=$value
        export "$var"="$value"
    fi

done < $configFile

echo $HUA_IP:

2 个答案:

答案 0 :(得分:1)

尝试:

Array ( 
    [0] => 
    [1] => Array ( 
            [0] => 98 
            [1] => 70 
    ) 
    [2] => Array ( 
            [0] => 2019-05-22 
            [1] => 2019-06-1``4 
    ) 
    [3] => Array ( 
            [0] => 100% 
            [1] => 100% 
    ) 
    [4] => Array ( 
            [0] => 78 
            [1] => 98 
    ) 
    [5] => Array ( 
            [0] => 54 
            [1] => 75 
    ) 
    [6] => Array ( 
            [0] => 36 
            [1] => 69 
    ) 
)

运行此代码时,输​​出为:

while read -r line; do
    line=${line//\"/}
    declare -x "${line/: /=}"
done<config.cf
echo "$HUA_IP"

工作原理

这里的关键是192.168.0.1 是内置的bash,它允许您使用bash变量来创建和分配另一个变量。举一个简单的例子:

declare

现在,将其应用于您的输入文件:

  • $ x="a=b"; declare -x "$x"; echo "$a" b

    这将启动一个循环,一次读取一行输入。

  • while read -r line; do

    这将从输入行中删除所有双引号。

  • line=${line//\"/}

    这将declare -x "${line/: /=}"替换为:,然后使用声明创建变量。

    =选项告诉bash导出声明的变量。

  • -x

    这告诉循环从done <config.cf获取其stdin。

答案 1 :(得分:0)

即使您更改了if条件,即使您的代码不是最好的方法,也可以正常工作。正确的方法是:

#...
if [ ! -z $var  ]
then
    # "$var"="$value"
    # eval $var=$value
    export "$var"="$value"
fi