Bash의 이중 변수 대체

Bash의 이중 변수 대체

프로그램 조각:

BASH_MIN_REQ="2.05"
BINUTILS_MIN_REQ="2.12"
BISON_MIN_REQ="1.875"

BASH_CURR=$(bash --version | head -n1 | cut -d"(" -f1 | cut -d" " -f4)
BINUTILS_CURR=$(ld --version | head -n1 | cut -d" " -f7)
BISON_CURR=$(bison --version | head -n1 | cut -d" " -f4)

list=(BASH BINUTILS BISON)

for progs in ${list[@]}; do
    echo "$progs: ${${progs}_MIN_REQ}:${${progs}_CURR}"
done

예상 출력:

BASH: 2.05:4.3.11
BINUTILS: 2.12:2.24
BISON: 1.875:3.0.2

값으로 초기화된 변수에 유의하세요. 초기화되었을 때의 값인 2.05로 바꾸고 다시 바꾸고 ${progs}_MIN_REQ싶습니다 . $BASH_MIN_REQ루프 내에서 이 작업을 수행하면 3개가 아닌 1개의 문만 for작성하면 되므로 코딩하기가 더 쉬워집니다 .echo

실제 출력:

bad substitution

echo나는 내가 무엇 에 관해 쓰는지 알고 있다 wrong. 그러나 변수를 이중으로 대체하는 방법이 있습니까? 그렇지 않으면 많은 echo진술을 작성해야 할 것입니다.

답변1

다음을 통해 간접적으로 이 작업을 수행할 수 있습니다.

for progs in ${list[@]}; do
     a="${progs}_MIN_REQ"
     b="${progs}_CURR"
     echo "$progs: ${!a}:${!b}"
done

답변2

for progs in "${list[@]}"; do
  eval 'echo "$progs: ${'"${progs}"'_MIN_REQ}:${'"${progs}"'_CURR}"'
done

관련 정보