使用 cat <<EOL 将字符串写入文件时防止变量替换
Prevent variable substitution when writing string to file with cat <<EOL
我想在 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)
正在执行并且输出正在写入文件。如何在不展开任何内容的情况下编写提供的文字字符串?
cat >./foo.bar <<'EOL'
t=$(ping 8.8.8.8)
EOL
[n]<<[-]word
If any part of word
is quoted, the delimiter is the result of quote
removal on word
, and the lines in the here-document are not expanded.
我想在 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)
正在执行并且输出正在写入文件。如何在不展开任何内容的情况下编写提供的文字字符串?
cat >./foo.bar <<'EOL'
t=$(ping 8.8.8.8)
EOL
[n]<<[-]word
If any part of
word
is quoted, the delimiter is the result of quote removal onword
, and the lines in the here-document are not expanded.