我试图读取格式如下的配置文件:
USER = username TARGET = arrows
我意识到,如果我摆脱了空格,我可以简单的来源配置文件,但为了安全起见,我试图避免.我知道有一种方法逐行读取配置文件.我认为这个过程是这样的:
>将行读入数组
>过滤出以#开头的所有行
>搜索数组中的变量名
之后我迷路了任何和所有的帮助将不胜感激.我已经尝试过这样的事情,没有成功:
backup2.config>cat ~/1 grep '^[^#].*' | while read one two;do echo $two done
我从我发现的论坛帖子中拉出,只是不知道如何修改它,以适应我的需要,因为我是如此新的shell脚本.
可以通过循环遍历两个数组来自动分配变量吗?
for (( i = 0 ; i < ${#VALUE[@]} ; i++ )) do "${NAME[i]}"=VALUE[i] done echo $USER
以下脚本会遍历输入文件中的每一行(在我的情况下为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