bash - 如何导入配置文件变量,但使用不同的分隔符?
问题描述
首先,source
并且.
由于我使用的是不同类型的分隔符而无法正常工作,类似于。
我已经尝试了几种可以谷歌搜索的方法,但到目前为止没有任何运气。
我设法正确打印出所有变量和值,但我无法在这个 bash 进程中将其存储为变量。
我想要的是:
在 bash 进程结束时,当我“回显 $HUA_IP:”
时,它应该根据 config.cf 文件给我“192.168.0.1”。
文件配置.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//\"/}
这将删除输入行中的所有双引号。
declare -x "${line/: /=}"
这将替换
:
为=
in line,然后使用 declare 创建一个变量。该
-x
选项告诉 bash 导出声明的变量。done <config.cf
这告诉循环从
config.cf
.
推荐阅读
- php - 将对象数组传递给php
- configuration - 如何在 Visual Studio 中更改 NLog.config 文件位置
- pandas - matplotlib。根据保持 x 轴相同的其他列中的值更改线的颜色
- reactjs - React Navigation:将参数传递给路由:TyperError
- c# - IIS 重写更改 ASP.Net 超链接后端绑定
- javascript - 我的“阅读更多”按钮展开后,如何向下推(下方)容器?
- python - python 正则表达式查询的问题:为什么 (-)?不捕获比赛?
- python - 将特定列的以下 n 行值替换为相同的值
- r - 如何根据R中长时间为零的时间来划分时间序列
- python-3.x - 从 Python 中的多维列表中删除空列表