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}_COLOURmolte 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).