Как проанализировать множество переменных в bash?

Как проанализировать множество переменных в bash?

Программа выводит свои данные в следующем формате:

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

И я хочу проанализировать некоторые из этих переменных в bash, чтобы я мог использовать их в своем скрипте, например:

$n = 4607356
$median = 0.410276

и так далее, за один раз.

Как мне это сделать?

решение1

Кажется, самый простой способ — перенаправить вывод в файл, а затем указать этот файл в качестве источника.

В скрипте это будет выглядеть так:

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

В этом случае bashвы можете обойтись вообще без временного файла:

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

Единственная теоретическая дыра в безопасности заключается в том, что программа может вывести опасный код, который что-то разрушит.

Вы можете избежать этого, проверив programвывод , чтобы sedубедиться, что он содержит только переменные:

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

он удалит все строки, которые кажутся не переменными (можно отредактировать по вашему вкусу).

решение2

С тем же предостережением безопасности, о котором упомянул @rush, вы можете просто добавить его evalк своей команде. Конечно, в обоих случаях все, что не является допустимым синтаксисом bash, приведет к ошибке (которую вы можете игнорировать).

Пример:

$ 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

Связанный контент