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

관련 정보