Имеем рабочую функцию парсинга INI-файлов:
Код: Выделить всё
get_ini()
{
while IFS='= ' read var val
do
if [[ $var == \[*] ]]
then
section=`echo "$var" | tr -d "[] "`
elif [[ $val ]]
then
eval $section$var="$val"
fi
done < $1
}
Работает следующим образом. Пусть есть INI-файл следующего вида:
Код: Выделить всё
[section1]
var1=val1
var2=val2
[section2]
var3=val3
var4=var4
...
Тогда в нашем скрипте вызываем функцию:
Код: Выделить всё
get_ini /path/to/ini.ini
... и получаем в коде доступными переменные вида $section1var1.
Хочу преобразовать эту функцию, чтобы она писала секции в массивы, т.е. в коде становились бы доступными переменные $section1[var1], $section1[var2] и т.д.
Почему-то никак не получается. Пробовал вызывать в функции
Код: Выделить всё
eval $section[$var]="$val"
но не работает.
Как сделать правильно?