Bash Parse Arrays From Config File

前端 未结 4 1855
孤独总比滥情好
孤独总比滥情好 2021-02-06 12:28

I need to have an array for each \"section\" in the file containing:

[array0]
value1=asdf
value2=jkl

[array1]
value1=1234
value2=5678

I want t

4条回答
  •  别那么骄傲
    2021-02-06 13:10

    with bash v4, using associative arrays, store the properties from the config file as actual bash variables:

    $ 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
    

提交回复
热议问题