2

foreach以下に示すように、Makefileの関数に1行のスクリプトを渡します。

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

このスクリプト行の機能はここにあります。行を別のスクリプトに入れて、Makefileから次のように呼び出すと、なぜこのように機能しないのか戸惑います。

flag:
        $(forech f, $*.txt, ./script $f)

それはうまくいきます。

forまた、次のようにシェルループを試しました。

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

まだ運がない。Makefilesのいくつかの微妙な点に触れなければなりません、誰かが私を教えてくれますか?ありがとう。

4

2 に答える 2

7

$ 記号が多すぎて不十分です。これは *.txt ファイルをリストします - $$F に注意してください:

all:
    for F in *.txt ; do \
    echo $$F ; done 
于 2011-06-04T11:14:41.323 に答える