我在for循环中调用脚本并遇到变量扩展的问题,其中两个变量中的第一个未包含在输出中。 (注意:代码改编自here)
LIST1 := a b c
LIST2 := 1 2 3
all:
@for x in $(LIST1); do \
for y in $(LIST2); do\
echo $$x $$y; \
echo $$x_$$y.txt; \
done \
done
#This will output:
a 1
1.txt
a 2
2.txt ....
#Where I expect
a 1
a_1.txt
a 2
a_2.txt
有关如何解决此问题的任何想法?
由于 zach cp
答案 0 :(得分:5)
这是一个shell问题,而不是make问题。如果您执行x=1; y=a; echo $x_$y.txt
,您将看到相同的输出。这是因为_
是一个有效的shell变量名字符,所以$x_
是一个有效的shell变量,它没有设置。 shell正在打印变量$x_
,然后是$y
,后跟.txt
。
如果以下字符是有效的shell变量名字符,请确保在shell变量周围使用大括号:
LIST1 := a b c
LIST2 := 1 2 3
all:
@for x in $(LIST1); do \
for y in $(LIST2); do\
echo $$x $$y; \
echo $${x}_$$y.txt; \
done \
done