arrays - Bash 从配置文件中解析数组

标签 arrays linux bash parsing configuration-files

我需要为文件中的每个“部分”创建一个数组,其中包含:

[array0]
value1=asdf
value2=jkl

[array1]
value1=1234
value2=5678

我希望能够像这样检索这些值:

echo ${array0[value1]}
echo ${array0[value2]}

echo ${array1[value1]}
echo ${array1[value2]}

关于如何实现这一点有什么想法吗? (解释将是一个奖励)

我已经阅读了这些答案,但没有一个完全符合我的要求。

Read a config file in BASH without using "source"

BASH Parsing variables from config file

Array like data structure in bash (config file)?

最佳答案

在 bash v4 中,使用关联数组,将配置文件中的属性存储为实际的 bash 变量:

$ while read line; do 
    if [[ $line =~ ^"["(.+)"]"$ ]]; then 
        arrname=${BASH_REMATCH[1]}
        declare -A $arrname
    elif [[ $line =~ ^([_[:alpha:]][_[:alnum:]]*)"="(.*) ]]; then 
        declare ${arrname}[${BASH_REMATCH[1]}]="${BASH_REMATCH[2]}"
    fi
done < config.conf

$ echo ${array0[value1]}
asdf

$ echo ${array1[value2]}
5678

$ for i in "${!array0[@]}"; do echo "$i => ${array0[$i]}"; done
value1 => asdf
value2 => jkl

$ for i in "${!array1[@]}"; do echo "$i => ${array1[$i]}"; done
value1 => 1234
value2 => 5678

关于arrays - Bash 从配置文件中解析数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167047/

相关文章:

php - php 中定义的变量和数组与函数

arrays - numpy 数组相乘后如何有效求和?

linux - Iptables 或在网关中重定向 IP 的东西 (GNU/Linux)

mysql - 反引号无法在 shell 脚本中运行 mysql 查询

linux - 采购 `compilervars.sh intel64` 时 libtbb.so.2 库不存在

macos - 在 OSX 中永久设置 PATH 环境变量

javascript - ajax url 选项可以采用一组 url 而不是仅一个

arrays - typescript 类型检查不适用于数组过滤器

bash - 如何使用 ssh 连接创建具有多个变量的粒度 bash 脚本

linux - 如何在文本/模式的前两个实例之间获取单词?