¿Cómo analizar muchas variables para bash?

¿Cómo analizar muchas variables para bash?

Un programa genera sus datos en este 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

Y quiero analizar algunas de esas variables en bash para poder usarlas en mi script, por ejemplo:

$n = 4607356
$median = 0.410276

y así sucesivamente, de una sola vez.

¿Cómo puedo hacer eso?

Respuesta1

Parece que la forma más sencilla es redirigir la salida a un archivo y luego obtener este archivo.

En el guión se verá así:

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

Puedes bashhacerlo sin ningún archivo temporal:

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

El único agujero de seguridad teórico es que el programa puede generar algún código peligroso que destruirá algo.

Puede evitarlo verificando programla salida de sedpara asegurarse de que solo contenga variables:

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

eliminará todas las cadenas que parezcan no variables (pueden editarse a su gusto).

Respuesta2

Con la misma advertencia de seguridad que mencionó @rush, simplemente puede anteponer evalsu comando. Por supuesto, en ambos casos, cualquier cosa que no sea una sintaxis bash válida producirá un error (que puedes ignorar).

Ejemplo:

$ 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

información relacionada