程序以这种格式输出其数据:
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