我需要为文件中的每个“部分”创建一个数组,其中包含:
[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 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/