猫在这里文件逃脱所有变量,但一个

时间:2016-10-14 02:57:17

标签: bash escaping eof cat heredoc

我必须用一些bash脚本写一个文件。要替换变量,我们只需使用EOF,我们就可以使用\来避免替换。但是,我想逃避一切,所以,我可以使用'EOF'并且也想要替换一个变量,那么如何?。

 cat > myfile <<'EOF'
    $a
    $b
    $c
    $d
    $e
    $f
    $g
   .....
   .....
   $multiple lines like this
   EOF

我想只用它的值替换一个变量let $c。在这种情况下我该怎么办?我不能使用\而不引用EOF转义所有行,因为有很多行。

我只想逃避所有变量替换('EOF')但想要用一个变量替换一个变量(How?)。

1 个答案:

答案 0 :(得分:2)

为了避免转义许多变量但仍然替换其中一个变量,请尝试:

$ cat script
sed 's/$c/3/' >myfile <<'EOF'
    $a
    $b
    $c
   $multiple lines like this
EOF

让我们运行脚本并检查输出文件:

$ bash script
$ cat myfile 
    $a
    $b
    3
   $multiple lines like this

替代

此版本允许变量$c,因此可能更灵活:

$ cat script
c=New
sed "s/\$c/$c/" >myfile <<'EOF'
    $a
    $b
    $c
   $multiple lines like this
EOF

执行此操作会导致:

$ bash script
$ cat myfile 
    $a
    $b
    New
   $multiple lines like this