Ich kann dies tun, aber es erfordert, dass eine Zeichenfolge der Variablen erstellt und dann dereferenziert wird. Gibt es eine Möglichkeit, es auf eine einfachere Aussage zu verkürzen?
#!/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
Ich habe viele Dinge wie ${!"${fruit}_COLOUR"}oder \$${fruit}_COLOURund viele andere Varianten ausprobiert , aber der einzige Weg, der funktioniert hat, ist die Verwendung eines Strings.
!Syntax ist ein Flag für die Variablensubstitution, das im Grunde "zweimal ersetzen" sagt. Es ändert nichts an der Anforderung, dass das, was sich im${…}befindet, ein Variablenname sein muss. Nein, Sie können es nicht vermeiden, eine Variable zu verwenden, die den Namen enthält, es sei denn, Sie verwenden eine andere Methode (eval).