我可以做到这一点,但是它需要对变量进行字符串处理然后再取消引用。有什么办法可以将其简化为更简单的陈述?
#!/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
我尝试了很多类似${!"${fruit}_COLOUR"}
或\$${fruit}_COLOUR
和其他许多变体的方法,但是唯一有效的方法是使用字符串。
您也可以使用关联数组更干净地执行此操作。但是,它不是您问题的直接答案,因此只需将其添加为评论即可。
—
Patrick
!
语法是变量替换一个标志,基本上说“替代两次”。并没有改变${…}
必须包含变量名的要求。因此,除非您使用其他方法(eval
),否则您将避免使用包含名称的变量。