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}_COLOUR
und 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
).