Вы можете использовать собственный синтаксический анализатор bash для интерпретации значений ini:
$ source <(grep = file.ini)
Пример файла:
[section-a]
var1=value1
var2=value2
IPS=( "1.2.3.4" "1.2.3.5" )
Для доступа к переменным вы просто печатаете их: echo $var1
.Вы также можете использовать массивы, как показано выше (echo ${IPS[@]}
).
Если вам нужно только одно значение, просто введите grep:
source <(grep var1 file.ini)
Это просто, так как вам не нужнодля любой внешней библиотеки для анализа данных, но это имеет некоторые недостатки.Например:
Если у вас есть пробелы между =
(имя и значение переменной), то сначала вы должны обрезать пробелы, например,
$ source <(grep = file.ini | sed 's/ *= */=/g')
Или, если вам не нужны пробелы (в том числе посередине), используйте:
$ source <(grep = file.ini | tr -d ' ')
Для поддержки ;
комментариев замените их на #
:
$ sed "s/;/#/g" foo.ini | source /dev/stdin
Разделы не поддерживаются (например, если у вас [section-name]
, вы должны отфильтровать его, как показано выше, например, grep =
), то же самое длядругие непредвиденные ошибки.
Если вам нужно прочитать определенное значение в определенном разделе, используйте grep -A
, sed
, awk
или ex
).
Например
source <(grep = <(grep -A5 '\[section-b\]' file.ini))
Примечание: где -A5
- количество строк, которые нужно прочитать в разделе.Замените source
на cat
для отладки.
Если у вас есть какие-либо ошибки синтаксического анализа, игнорируйте их, добавив: 2>/dev/null
См. Также: Как проанализировать и преобразовать INI-файл в переменные массива bash? при ошибке сервера SE