Inity
Inity

Reputation: 31

Extract information from ini file and add to associative array (Bash)

I'm stucked on a bash script. I'm having a config.ini files like this :

#Username
username=user

#Userpassword
userpassword=password

And i'm looking in a bash script to extract this information and put it in a associative array. My script looks like :

declare -A array
OIFS=$IFS
IFS='='
grep -vE '^(\s*$|#)' file | while read -r var1 var2 
do
    array+=([$var1]=$var2)
done

echo ${array[@]}

But the array seems to be empty because the commande echo ${array[@]} gives no output.

Any idea why me script don't work ? Thanks for your help and sorry for my bad english.

Upvotes: 1

Views: 651

Answers (2)

grail
grail

Reputation: 930

Assuming the file can be trusted (ie the content is regulated and known), the simplest method would be to source the ini file and then directly use the variable names within the script:

. config.ini

You can either use the period (.) as above or the source builtin command

Upvotes: 1

Wayne Vosberg
Wayne Vosberg

Reputation: 1053

Common error - "grep | while" causes the while loop to be executed in a separate shell and the variables inside the loop are not global to your shell. Use a here string instead:

while read -r var1 var2 
do
    array+=([$var1]=$var2)
done <<< $(grep -vE '^(\s*$|#)' file)

Upvotes: 1

Related Questions