Posso farlo, ma richiede di creare una stringa della variabile e quindi di dereferenziarla. C'è un modo per accorciarlo a una dichiarazione più semplice?
#!/bin/bash
FRUITS="BANANA APPLE ORANGE"
BANANA_COLOUR="Yellow"
APPLE_COLOUR="Green or Red"
ORANGE_COLOUR="Blue"
for fruit in $( echo $FRUITS ); do
fruit_colour="${fruit}_COLOUR"
echo $fruit is ${!fruit_colour}
done
Ho provato molte cose come ${!"${fruit}_COLOUR"}
oe \$${fruit}_COLOUR
molte altre varianti, ma l'unico modo che ha funzionato è usare una stringa.
!
sintassi è una bandiera sulla sostituzione delle variabili che sostanzialmente dice "sostituisci due volte". Non cambia il requisito secondo cui ciò che è dentro${…}
deve essere un nome variabile. Quindi no, non puoi evitare di usare una variabile che contiene il nome, a meno che tu non usi un metodo diverso (eval
).