在BASH中读取配置文件,而不使用“源”

前端之家收集整理的这篇文章主要介绍了在BASH中读取配置文件,而不使用“源”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图读取格式如下的配置文件
USER = username
TARGET = arrows

我意识到,如果我摆脱了空格,我可以简单的来源配置文件,但为了安全起见,我试图避免.我知道有一种方法逐行读取配置文件.我认为这个过程是这样的:

>将行读入数组
>过滤出以#开头的所有行
>搜索数组中的变量名

之后我迷路了任何和所有的帮助将不胜感激.我已经尝试过这样的事情,没有成功:

backup2.config>cat ~/1

grep '^[^#].*' | while read one two;do
    echo $two
done

我从我发现的论坛帖子中拉出,只是不知道如何修改它,以适应我的需要,因为我是如此新的shell脚本.

http://www.linuxquestions.org/questions/programming-9/bash-shell-program-read-a-configuration-file-276852/

可以通过循环遍历两个数组来自动分配变量吗?

for (( i = 0 ; i < ${#VALUE[@]} ; i++ ))
do
    "${NAME[i]}"=VALUE[i]           
done
echo $USER

这样调用$USER会输出“username”?上面的代码不工作,但我知道解决方案是类似的.

以下脚本会遍历输入文件中的每一行(在我的情况下为vars),并且与…匹配.如果找到等号,它将使用 Parameter Expansion从值中解析变量名称.然后它分别将每个部分存储在它自己的数组,名称和值中.
#!/bin/bash

i=0
while read line; do
  if [[ "$line" =~ ^[^#]*= ]]; then
    name[i]=${line%% =*}
    value[i]=${line#*= }
    ((i++))
  fi
done < vars

echo "total array elements: ${#name[@]}"
echo "name[0]: ${name[0]}"
echo "value[0]: ${value[0]}"
echo "name[1]: ${name[1]}"
echo "value[1]: ${value[1]}"
echo "name array: ${name[@]}"
echo "value array: ${value[@]}"

输入

$cat vars
sdf
USER = username
TARGET = arrows
asdf
as23

产量

$./varscript
total array elements: 2
name[0]: USER
value[0]: username
name[1]: TARGET
value[1]: arrows
name array: USER TARGET
value array: username arrows

猜你在找的Bash相关文章