【发布时间】:2015-09-15 02:48:25
【问题描述】:
为了说明这个问题,我创建了一个 makefile,它首先定义了一个汽车列表,然后为每辆汽车定义了一个颜色列表:
CARS = Ford Ferrari Mercedes Toyota
Ford_COLOURS = black blue red white
Ferrari_COLOURS = red
Mercedes_COLOURS = black blue silver
Toyota_COLOURS = blue red white
然后,我想在我的一个 make 目标中循环遍历每辆车的所有颜色:
.PHONY: list
list:
for car in ${CARS} ; do \
car_colours=$${car}_COLOURS ; \
echo $${car_colours} = "$${!car_colours}" ; \
eval colours="$${!car_colours}" ; \
for colour in $${colours} ; do \
echo $${colour} ; \
done ; \
done
如您所见,我试图综合this question about generating dynamic variable names in bash 的想法和this question about how to evaluate (expand) dynamic names in bash 的一些答案。
不幸的是,我得到以下输出:
Ford_COLOURS =
Ferrari_COLOURS =
Mercedes_COLOURS =
Toyota_COLOURS =
虽然我希望得到这样的东西:
Ford_COLOURS = black blue red white
black
blue
red
white
Ferrari_COLOURS = red
red
Mercedes_COLOURS = black blue silver
black
blue
silver
Toyota_COLOURS = blue red white
blue
red
white
我该如何解决?
【问题讨论】: