在嵌套循环中引用Makefile变量

zac*_*ach 3 makefile

我在for循环中调用脚本并遇到变量扩展的问题,其中两个变量中的第一个未包含在输出中.(注意:代码改编自这里)

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
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何想法?

谢谢zach cp

Mad*_*ist 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
Run Code Online (Sandbox Code Playgroud)