Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
make:在sed调用中引用shell变量_Shell_Variables_Sed_Makefile - Fatal编程技术网

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

我正在使用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 '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"