Tengo las siguientes variables:

TYP=a1
STAT_a1=statistical
FINAL_VARIABLE=${STAT_${TYP}} 

Pero recibo un error:

-bash: ${STAT_${TYP}} : bad substitution 

Lo que quiero es que el valor de FINAL_VARIABLE sea 'estadístico'

Por favor, ayúdeme.

0
Djeah 7 mar. 2018 a las 08:18

3 respuestas

La mejor respuesta

No puedes anidar expansiones variables como esa. Pero puede usar la expansión variable indirecta con ${!varname}:

TYP=a1
STAT_a1=statistical
STAT_var=STAT_${TYP}    # This sets STAT_var to "STAT_a1"
FINAL_VARIABLE=${!STAT_var}    # This sets FINAL_VARIABLE to "statistical"

Por cierto, recomiendo evitar los nombres de variables en mayúsculas como TYP y FINAL_VARIABLE: hay una serie de nombres en mayúsculas con significados especiales para el shell y / u otros programas, y si usas accidentalmente Una de esas cosas raras puede suceder.

1
Gordon Davisson 7 mar. 2018 a las 05:28

Use eval, envolviendo todas las cosas que desea diferir evaluando entre comillas simples:

eval 'FINAL_VARIABLE=${STAT_'${TYP}'}'

$ TYPE=al
$ STAT_a1=statistical
$ eval 'FINAL_VARIABLE=${STAT_'${TYP}'}'
$ echo $FINAL_VARIABLE
statistical
0
Jeff Breadner 7 mar. 2018 a las 05:27

También puedes hacer así

root@myagent: tmp$ F=$(echo "${STAT_a1}"_"${TYP}")
root@myagent: tmp$ echo $F
statistical_a1
-1
rɑːdʒɑ 7 mar. 2018 a las 05:32