如何解析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

相关内容