使用cat&lt; <eol

时间:2018-01-20 22:44:14

标签: bash shell heredoc

=“”

将字符串写入文件时防止变量替换我希望将字符串写入文件中一个bash脚本,但不知道如何防止变量被扩展。示例脚本:

#!/bin/bash

cat >./foo.bar <<EOL
t=$(ping 8.8.8.8)
EOL

产生输出:

t=
Pinging 8.8.8.8 with 32 bytes of data:
Reply from 8.8.8.8: bytes=32 time=17ms TTL=57
Reply from 8.8.8.8: bytes=32 time=16ms TTL=57
Reply from 8.8.8.8: bytes=32 time=17ms TTL=57
Reply from 8.8.8.8: bytes=32 time=17ms TTL=57

Ping statistics for 8.8.8.8:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 16ms, Maximum = 17ms, Average = 16ms

因此似乎正在执行$(ping 8.8.8.8)并且正在将输出写入文件。如何在不扩展任何内容的情况下编写提供的文字字符串?

1 个答案:

答案 0 :(得分:3)

cat >./foo.bar <<'EOL'
t=$(ping 8.8.8.8)
EOL

引用Bash Reference Manual

  

[n]<<[-]word

     

如果引用word的任何部分,则分隔符是引用的结果   删除word,并且不会展开here-document中的行。