Исходная команда для тех строк в файле, которые не имеют равно (=)

У меня есть такой файл:

(blank line)
[Test1]
a=1
b=2
c=3

Мне нужно прочитать значение a , b , c в переменных, поэтому я использовал команду source , и она выполнила свою работу. Но для строки 2, то есть [Test1] , команда show не найдена.

Как мне взять [Test1] в переменную?

В основном я ожидаю:

$some_var=[Test1]
$a=1
$b=2
$c=3

Так что я могу использовать эти значения и дальше.

В настоящее время я удаляю первые две строки из файла, а затем исходный файл , и при этом я не получаю строку 2 в переменной. Ищу способ получше. Я делаю все это внутри сценария bash.

0
09.12.2016, 09:45
2 ответа

Предполагая, что у вас есть подмена процесса, вы можете сделать что-то вроде этого:

source <(sed 's/^\[/some_var=\[/' file)
1
28.01.2020, 02:47

Если файлы не большие (начиная с bash 4.4):

readarray -t arr <infile         # the value in zero is a blank line.
some_var="${arr[1]}"             # use the first line.
. <(printf '%s\n' "${arr[@]:2}") # source the rest.
echo "some_var=$some_var a=$a a=$b a=$c"

При выполнении:

$ ./script
some_var=[Test1] a=1 a=2 a=3

Для более старых версий bash решение становится гораздо более запутанным, но возможно.
Это эквивалент, начиная с bash 2.04 (2000-03-21).

unset arr; i=0
while IFS='' read -r a ; do arr[i]="$a"; ((i++));done <infile
some_var="${arr[1]}"                    # use the first line.
. <(printf '%s\n' "${arr[@]:2}")        # source the rest.
0
28.01.2020, 02:47

Теги

Похожие вопросы