Como analisar muitas variáveis ​​para bash?

Como analisar muitas variáveis ​​para bash?

Um programa exibe seus dados neste formato:

n=4607356
null_cells=5668556
cells=10275912
min=0.0433306089835241
max=0.53108499199152
range=0.487754383007996
mean=0.40320252333736
mean_of_abs=0.40320252333736
stddev=0.0456556814489487
variance=0.00208444124856788
coeff_var=11.3232628285782
sum=1857697.565113524
first_quartile=0.378443
median=0.410276
third_quartile=0.435232
percentile_90=0.457641

E quero analisar algumas dessas variáveis ​​no bash para poder usá-las em meu script, por exemplo:

$n = 4607356
$median = 0.410276

e assim por diante, de uma só vez.

Como eu posso fazer isso?

Responder1

Parece que a maneira mais fácil é redirecionar a saída para um arquivo e, em seguida, originar esse arquivo.

No script ficará assim:

#!/bin/sh
program > tmp_file
. tmp_file
rm tmp_file
echo $any_var_you_need

Você bashpode fazer isso sem nenhum arquivo temporário:

#!/bin/bash
source <(program)
echo $any_var_you_need

A única falha de segurança teórica é que o programa pode gerar algum código perigoso que destruirá alguma coisa.

Você pode evitá-lo verificando programa saída de sedpara ter certeza de que contém apenas variáveis:

program | sed '/^\s*[a-zA-Z_.][_a-zA-Z0-9]*=[a-zA-Z0-9_-+.,]*/!d;s/ .*//;'

ele removerá todas as strings que parecem não ser variáveis ​​(podem ser editadas a seu gosto).

Responder2

Com a mesma advertência de segurança mencionada por @rush, você pode simplesmente acrescentar evalao seu comando. É claro que, em ambos os casos, qualquer coisa que não seja uma sintaxe válida do bash produzirá um erro (que você pode ignorar).

Exemplo:

$ echo 'a=1
> b=2
> c=1234'
a=1
b=2
c=1234
$ echo $b

$ eval echo 'a=1
b=2
c=1234'
a=1
$ echo $b
2

informação relacionada