如果我将文件路径名直接放入代码中,它会按预期运行 - 在这两个START- / ENDTAG之间替换文件中的代码。但是,如果我使用变量而不是该文件路径名,它将删除要替换的整个部分或完全忽略它。
#!/bin/bash
CF_HTMLHEAD=$(cat ./cf_templates/cf_HtmlHead.txt)
...
sed '
'"$ENDTAG"' r $CF_HTMLHEAD
'"$STARTTAG"','"$ENDTAG"' d
' -i $TARGETDIR
我尝试过使用'"$CF_HTMLHEAD"' , '$CF_HTMLHEAD' and "$CF_HTMLHEAD"
并改变变量定义本身:CF_HTMLHEAD='$(...)' , ="$(...)"
,以及我能想到的两行之间的所有组合。
有关sed如何读取文件输入变量的任何线索?
答案 0 :(得分:2)
使用双引号会更加整洁:
sed "
/$ENDTAG/ r $CF_HTMLHEAD
/$STARTTAG/,/$ENDTAG/ d
" -i "$TARGETDIR"
我假设你没有在你的* TAG变量中添加斜杠
答案 1 :(得分:0)
根据Muru's和Etan Reisner的见解,问题出现在变量声明中。
CF_HTMLHEAD=./cf_templates/cf_HtmlHead.txt
一旦我脱掉了'和",代码为我跑了。谢谢大家!