Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Bash 在Makefile内的sed中替换变量_Bash_Sed_Makefile - Fatal编程技术网

Bash 在Makefile内的sed中替换变量

Bash 在Makefile内的sed中替换变量,bash,sed,makefile,Bash,Sed,Makefile,我已经看完了所有可能的答案,但我仍然无法使我的脚本工作 我在SPARQL中有一个查询脚本,其中有一行需要用介于“”之间的变量替换标记%contributor% 进入 ?链接dcterms:贡献者 如果我在shell中执行代码,那么替换就正确完成了,并且我看到我的查询成功地替换了%contributor%标记。但是当在Makefile中执行时,即使使用双$美元来允许变量的扩展,我也无法完成它 for l in `cat sref.csv`; do \ QUERY=$$(cat queri

我已经看完了所有可能的答案,但我仍然无法使我的脚本工作

我在SPARQL中有一个查询脚本,其中有一行需要用介于“”之间的变量替换标记%contributor%

进入

?链接dcterms:贡献者
如果我在shell中执行代码,那么替换就正确完成了,并且我看到我的查询成功地替换了%contributor%标记。但是当在Makefile中执行时,即使使用双$美元来允许变量的扩展,我也无法完成它

for l in `cat sref.csv`; do \
    QUERY=$$(cat queries/table_knowledge.rq | sed "s@%contributor%@<$$l>@g") ; \
    echo $$QUERY ; \
done
“cat sref.csv”中l的
;做\
QUERY=$$(cat查询/table_knowledge.rq|sed“s@%contributor%@@g”)\
echo$$QUERY\
完成
同样,它也不起作用:

QUERY=$$(cat queries/table_knowledge.rq | sed 's/%contributor%/<$(l)>/g') ; \
QUERY=$$(cat查询/table_knowledge.rq | sed's/%contributor%//g')\

QUERY=$$(cat查询/table_knowledge.rq | sed's/%contributor%//g')\

使用双引号,以便sed可以展开变量
使用不同于
/
的分隔符,因为替换件包含
/

QUERY=$(cat查询/table|u knowledge.rq|sed“s |%contributor%| g”)

测试:

$test=”http://test.com"
$echo”?链接dcterms:contributor%contributor%>source.file
$x=$(cat source.file | sed“s |%contributor%| | g”)
$echo$x
?链接术语:贡献者

首先,“我无法完成”不是一个有用的问题报告。到底发生了什么?什么是印刷品?你看到一堆空行了吗?没有输出?请剪切/粘贴结果。我觉得您的第一个版本很合适(第二个或第三个版本无法工作,因为您使用
'
引用,并且您正在使用make变量引用,但您正在尝试访问shell变量)。如果您仍然被卡住,我建议添加
set-x
前面加上code>,以便shell打印它试图调用的命令。问题的第一个版本使用双引号。同样,第一个版本使用
@
作为分隔符,而不是
/
。这个问题说明它是从shell开始工作的,您在这里只是重新断言。问题是它不能在makefile配方中工作。
for l in `cat sref.csv`; do \
    QUERY=$$(cat queries/table_knowledge.rq | sed "s@%contributor%@<$$l>@g") ; \
    echo $$QUERY ; \
done
QUERY=$$(cat queries/table_knowledge.rq | sed 's/%contributor%/<$(l)>/g') ; \
QUERY=$$(cat queries/table_knowledge.rq | sed 's/%contributor%/<${l}>/g') ; \
$ test="http://test.com"
$ echo "?link dcterms:contributor %contributor%" > source.file
$ x=$(cat source.file|sed "s|%contributor%|<${test}>|g")
$ echo $x
?link dcterms:contributor <http://test.com>