Como analisar muitas variáveis para bash?

5

Um programa envia 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 eu quero analisar algumas dessas variáveis no bash para que eu possa usá-las no meu script, por exemplo:

$n = 4607356
$median = 0.410276

e assim por diante, de uma só vez.

Como posso fazer isso?

    
por user528025 09.07.2012 / 14:11

2 respostas

7

Parece que a maneira mais fácil é redirecionar a saída para um arquivo e depois para esse arquivo.

No script, será semelhante a:

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

Em bash você pode fazer isso sem arquivo temporário:

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

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

Você pode evitá-lo com a verificação da saída de program com sed para ter certeza de que ele contém apenas as variáveis:

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

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

    
por 09.07.2012 / 14:24
2

Com o mesmo aviso de segurança que o @rush mencionou, você pode simplesmente preceder eval ao seu comando. Naturalmente, em ambos os casos, qualquer coisa que não seja uma sintaxe bash válida 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
    
por 09.07.2012 / 14:29