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

相關內容