Mogę to zrobić, ale wymaga to utworzenia ciągu zmiennej, a następnie wyrejestrowania go. Czy jest jakiś sposób, aby skrócić to do prostszego stwierdzenia?
#!/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
Próbowałem wiele rzeczy, jak ${!"${fruit}_COLOUR"}
i \$${fruit}_COLOUR
wielu innych wariantów, ale jedynym sposobem, który pracował jest za pomocą łańcucha.
!
Składnia jest flaga na zmiennej substytucji, że w zasadzie mówi „substytutem dwa razy”. Nie zmienia to wymogu, że to, co jest w środku,${…}
musi być nazwą zmiennej. Więc nie, nie możesz uniknąć używania zmiennej zawierającej nazwę, chyba że użyjesz innej metody (eval
).