make:在sed调用中引用shell变量
我正在使用make,我想在sed中引用一个shell变量。但是,在make:在sed调用中引用shell变量,shell,variables,sed,makefile,Shell,Variables,Sed,Makefile,我正在使用make,我想在sed中引用一个shell变量。但是,在sed-调用$$LASTMOD中,只会扩展到$LASTMOD,但我想看到类似的内容 -rw-r--r-- 1 weiss Administ 5752 Apr 1 23:44 src/stata/ini-00.do 它适用于echo,但不适用于sed.ONESHELL似乎也不起作用 .SUFFIXES : .do .tmp DOFILES = $(shell ls src/stata/*.do | sed
sed
-调用$$LASTMOD
中,只会扩展到$LASTMOD
,但我想看到类似的内容
-rw-r--r-- 1 weiss Administ 5752 Apr 1 23:44 src/stata/ini-00.do
它适用于echo
,但不适用于sed
.ONESHELL
似乎也不起作用
.SUFFIXES : .do .tmp
DOFILES = $(shell ls src/stata/*.do | sed 's/.do/.tmp/')
all: $(DOFILES)
.do.tmp:
LASTMOD=`ls -l $*`; echo $$LASTMOD; sed -e \
"s/Last modified:.*/Last modified: $$LASTMOD/g" $*.do > $*.tmp
更新:
按照@geekosaur、@William Pursell和@eriktous的建议应用更改后,它就像一个符咒:
.SUFFIXES : .do .tmp
DOFILES = $(shell ls src/stata/*.do | sed 's/\.do/\.tmp/')
all: $(DOFILES)
.do.tmp:
LASTMOD=`ls -l $<`; \
sed -e "s, Last modified:.*, Last modified: $$LASTMOD, g" $*.do > $*.tmp
后缀:.do.tmp
DOFILES=$(shell ls src/stata/*.do | sed's/\.do/\.tmp/)
全部:$(DOFILES)
.do.tmp:
LASTMOD=`ls-l$$*.tmp
你真的在那里使用双引号吗?我希望这种行为来自单引号;但是,如果使用双引号,您将得到sed
语法错误,除非您避开斜杠或使用不同的模式分隔符(我通常使用,
,当我知道将涉及/
时,就像路径名一样)
您的意思是说
ls-l$*
,还是想写ls-l$,谢谢,但这也不行(而且LASTMOD=$$(ls-l“$*”)
没有被解释为Bash变量)。请接受我的道歉,但您是对的。正如@William Pursell所指出的,由于错误指定了LASTMOD
-变量,它无法工作。DOFILES
程序集中的sed脚本可能不是您想要的,尽管它现在可能适合您。.do
中的
被解释为特殊字符。这将更改d.tmp.do
中名为dodo.do
的文件。您说得对,谢谢。。。也改变了。啊,你说得对!它是$<不是$*。然而,我想知道谁应该得到赏金@geekosaur建议,
而不是/
也是正确的。我确实需要两个答案来解决我的问题。。。
LASTMOD=$$(ls -l "$*"); \
sed "s,Last modified:.*,Last modified: $$LASTMOD,g" "$*.do" >"$*.tmp"