Forfile中的循环无效

day*_*day 2 shell grep makefile sed ed

我有一个单行脚本传入foreachMakefile中的函数,如下所示:

flag:
        $(foreach f, $*.txt, printf "%s\n" 0a "$(grep -o '[0-9]\+' $f | sed 's/.*/read \"&\"/')" "" . w q | ed $f)
Run Code Online (Sandbox Code Playgroud)

这个脚本行的功能可以在这里找到.我只是感到困惑,为什么它不能以这种方式工作,因为如果我将该行放入一个单独的脚本并从Makefile中调用它,如下所示:

flag:
        $(forech f, $*.txt, ./script $f)
Run Code Online (Sandbox Code Playgroud)

它工作正常.

我也试过shell for循环如下:

flag:
        for f in $*.txt ; do \
          printf "%s\n" 0a "$(grep -o '[0-9]\+' $f | sed 's/.*/read \"&\"/')" "" . w q | ed $f ; \
        done
Run Code Online (Sandbox Code Playgroud)

仍然没有运气.我必须触及Makefiles的一些微妙点,任何人都可以启发我吗?谢谢.

小智 7

既有太多也没有足够的$符号!这列出了*.txt文件 - 注意$$ F:

all:
    for F in *.txt ; do \
    echo $$F ; done 
Run Code Online (Sandbox Code Playgroud)