Substituição de variável dupla no bash

4

Snippet do programa:

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

Resultado esperado:

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

Observe as variáveis inicializadas com os valores. Eu quero substituir ${progs}_MIN_REQ com $BASH_MIN_REQ e, em seguida, novamente com o valor que foi inicializado com que é 2.05. E faça isso dentro do loop for , para que seja mais fácil escrever o código, pois vou ter que escrever apenas 1 echo em vez de 3.

Saída real:

bad substitution

Eu sei o que escrevi em echo is wrong . Mas existe uma maneira de substituir as variáveis? Caso contrário, terei que escrever muitas instruções echo .

    
por Abhimanyu Saharan 27.05.2016 / 18:23

2 respostas

4

Você pode fazer isso indiretamente

for progs in ${list[@]}; do
     a="${progs}_MIN_REQ"
     b="${progs}_CURR"
     echo "$progs: ${!a}:${!b}"
done
    
por 27.05.2016 / 18:32
2
for progs in "${list[@]}"; do
  eval 'echo "$progs: ${'"${progs}"'_MIN_REQ}:${'"${progs}"'_CURR}"'
done
    
por 27.05.2016 / 18:32