Wie analysiere ich viele Variablen für Bash?

Wie analysiere ich viele Variablen für Bash?

Ein Programm gibt seine Daten in diesem Format aus:

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

Und ich möchte einige dieser Variablen in Bash analysieren, damit ich sie in meinem Skript verwenden kann, z. B.:

$n = 4607356
$median = 0.410276

und so weiter, in einem Rutsch.

Wie kann ich das machen?

Antwort1

Der einfachste Weg scheint zu sein, die Ausgabe in eine Datei umzuleiten und diese Datei dann als Quelle zu verwenden.

Im Skript sieht es folgendermaßen aus:

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

Sie bashkönnen es ganz ohne temporäre Datei tun:

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

Die einzige theoretische Sicherheitslücke besteht darin, dass das Programm möglicherweise gefährlichen Code ausgibt, der etwas zerstört.

Sie können dies vermeiden, indem Sie programdie Ausgabe von prüfen, um sedsicherzugehen, dass sie nur Variablen enthält:

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

Dadurch werden alle Zeichenfolgen entfernt, die keine Variablen zu sein scheinen (können nach Belieben bearbeitet werden).

Antwort2

Mit dem gleichen Sicherheitsvorbehalt wie @rush erwähnt, könnten Sie evalIhrem Befehl einfach voranstellen. Natürlich führt in beiden Fällen alles, was keine gültige Bash-Syntax ist, zu einem Fehler (den Sie ignorieren können).

Beispiel:

$ 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

verwandte Informationen