Comando de origem para as linhas no arquivo que não têm igual a (=)

0

Eu tenho um arquivo como este:

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

Eu tenho que ler o valor de a , b , c em variáveis, então usei o comando source e ele fez o trabalho. Mas para a linha 2, ou seja, [Test1] , o comando show não foi encontrado.

Como posso usar [Test1] em uma variável também?

Basicamente estou esperando:

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

Para que eu possa usar esses valores ainda mais.

Atualmente, o que estou fazendo é remover as duas primeiras linhas do arquivo e, em seguida, source file e, ao fazer isso, não estou obtendo a linha 2 em uma variável. Eu estou procurando um caminho melhor. Eu estou fazendo tudo dentro de um script bash.

    
por serenesat 09.12.2016 / 08:45

2 respostas

1

Supondo que você tenha uma substituição de processo, você pode fazer algo assim:

source <(sed 's/^\[/some_var=\[/' file)
    
por 09.12.2016 / 17:32
0

Se os arquivos não forem grandes (desde o 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"

Quando executado:

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

Para o bash mais antigo, a solução se torna muito mais complicada, mas possível.
Este é o equivalente desde 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.
    
por 09.12.2016 / 15:20