【问题标题】:Cat here document escape all variable but oneCat here document 转义除一个以外的所有变量
【发布时间】:2017-02-23 08:34:08
【问题描述】:

我必须使用一些 bash 脚本写入文件。要替换变量,我们可以简单地使用EOF,然后用\ 转义替换。但是,我想逃避一切,所以,我可以使用'EOF',也想替换一个变量,那么如何呢?

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

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

我只想转义所有变量替换('EOF')但想用它的值替换一个变量(如何?)。

【问题讨论】:

    标签: bash escaping eof cat heredoc


    【解决方案1】:

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

    $ 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
    

    【讨论】:

    • 很好!,它成功了!。正如我所说,我只想替换一个变量并且它有效。如果我想替换多个变量怎么办,让它成为 2 个变量替换,知道吗?
    • 我花了很多时间试图找到它,这对我很有帮助。我预计我可能需要替换多个变量,并想知道在这种情况下如何使用sed...
    • @user465465 要同时替换$c$d,请使用sed "s/\$c/$c/; s/\$d/$d/" &gt;myfile &lt;&lt;'EOF'
    • 太好了,谢谢!可能我应该开始使用 sed 而不是 cat。
    • @user465465 很高兴它对你有用。如果您要编写大量的 shell 脚本,sedawk 都是有用的工具。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2015-11-14
    • 2018-12-09
    • 2020-05-25
    • 2023-01-17
    • 1970-01-01
    相关资源
    最近更新 更多