Получить значения переменных из конфигурационного файла
У меня есть один файл конфигурации с некоторыми переменными, например, ниже, но моя команда читает только некоторые значения переменных, я не могу прочитать все значения в файле конфигурации. Кажется только чтение значений с числами. Какой лучший способ прочитать все возможные типы значений?
sed -n '/^SENDER=\([*]*\)$/s//\1/p' "Config_file"
cONFIG_FILE:
# Some text
LOGLEVEL=1
# Some text
THRESHOLD=0
# Some text
SAVERULES=0
# Some text
LINESTOSEARCH=1000000
# Some text
HTDOCSFOLDER=/var/www/
# Some text
LOG=/var/log/access.log
# Some text
SENDER=xpto@xpto.bar
1 ответ
Решение
/^SENDER=\([*]*\)$/s//\1/p
[*]
Что это за синтаксис? Любой символ .
в регулярных выражениях.
$ sed -n '/^SENDER=\(.*\)$/s//\1/p' <<< SENDER=xpto@xpto.bar
xpto@xpto.bar
Но я сомневаюсь, что вы выбрали правильный способ делать то, что делаете. Зачем тебе это нужно? Скорее всего, было бы намного лучше прочитать всю конфигурацию в массиве.
#!/bin/bash
readconfig() {
local ARRAY="$1"
local KEY VALUE
local IFS='='
declare -g -A "$ARRAY"
while read; do
# here assumed that comments may not be indented
[[ $REPLY == [^#]*[^$IFS]${IFS}[^$IFS]* ]] && {
read KEY VALUE <<< "$REPLY"
[[ -n $KEY ]] || continue
eval "$ARRAY[$KEY]=\"\$VALUE\""
}
done
}
readconfig MYCONFIG < "Config_file"
echo ${MYCONFIG[SENDER]}