为什么sed会忽略文件变量?

时间:2015-11-12 20:02:30

标签: bash variables sed

如果我将文件路径名直接放入代码中,它会按预期运行 - 在这两个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如何读取文件输入变量的任何线索?

2 个答案:

答案 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

一旦我脱掉了'和",代码为我跑了。谢谢大家!