У меня есть такой файл:
(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.
Предполагая, что у вас есть подмена процесса, вы можете сделать что-то вроде этого:
source <(sed 's/^\[/some_var=\[/' file)
Если файлы не большие (начиная с 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.