首先,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:
答案 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