Supondo que você tenha uma substituição de processo, você pode fazer algo assim:
source <(sed 's/^\[/some_var=\[/' file)
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.
Supondo que você tenha uma substituição de processo, você pode fazer algo assim:
source <(sed 's/^\[/some_var=\[/' file)
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.
Tags bash awk sed shell-script