如何导入配置文件变量,但使用不同的分隔符?
How to import a config file variable, but use a different separator?
首先,source
和 .
不起作用,因为我使用的是不同类型的分隔符,类似于。
我已经尝试了几种方法 google,但到目前为止还没有成功。
我设法正确打印出所有变量和值,但我无法将其作为变量存储在此 bash 过程中。
我想要的:
在 bash 过程结束时,我 "echo $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:
尝试:
while read -r line; do
line=${line//\"/}
declare -x "${line/: /=}"
done<config.cf
echo "$HUA_IP"
当这段代码为运行时,输出为:
192.168.0.1
工作原理
这里的关键是 declare
,它是一个 bash 内置函数,允许您使用 bash 变量来创建和分配另一个变量。举个简单的例子:
$ x="a=b"; declare -x "$x"; echo "$a"
b
现在,让我们将其应用于您的输入文件:
while read -r line; do
这会启动一个循环,一次读取一行输入。
line=${line//\"/}
这将从输入行中删除所有 double-quotes。
declare -x "${line/: /=}"
这会将行中的 :
替换为 =
,然后使用 declare 创建一个变量。
-x
选项告诉 bash 导出声明的变量。
done <config.cf
这告诉循环从 config.cf
.
获取它的标准输入
如果您更改 if
条件,您的代码即使不是最佳方法也能正常工作。正确的方法是:
#...
if [ ! -z $var ]
then
# "$var"="$value"
# eval $var=$value
export "$var"="$value"
fi
首先,source
和 .
不起作用,因为我使用的是不同类型的分隔符,类似于。
我已经尝试了几种方法 google,但到目前为止还没有成功。
我设法正确打印出所有变量和值,但我无法将其作为变量存储在此 bash 过程中。
我想要的:
在 bash 过程结束时,我 "echo $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:
尝试:
while read -r line; do
line=${line//\"/}
declare -x "${line/: /=}"
done<config.cf
echo "$HUA_IP"
当这段代码为运行时,输出为:
192.168.0.1
工作原理
这里的关键是 declare
,它是一个 bash 内置函数,允许您使用 bash 变量来创建和分配另一个变量。举个简单的例子:
$ x="a=b"; declare -x "$x"; echo "$a"
b
现在,让我们将其应用于您的输入文件:
while read -r line; do
这会启动一个循环,一次读取一行输入。
line=${line//\"/}
这将从输入行中删除所有 double-quotes。
declare -x "${line/: /=}"
这会将行中的
:
替换为=
,然后使用 declare 创建一个变量。-x
选项告诉 bash 导出声明的变量。done <config.cf
这告诉循环从
config.cf
. 获取它的标准输入
如果您更改 if
条件,您的代码即使不是最佳方法也能正常工作。正确的方法是:
#...
if [ ! -z $var ]
then
# "$var"="$value"
# eval $var=$value
export "$var"="$value"
fi