У меня есть однострочный скрипт, переданный в функцию foreach
в Makefile, как показано ниже:
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, кто-нибудь может просветить меня? Спасибо.