You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cat <<EOL写入文件时如何阻止Bash变量替换

如何在Bash Here文档中保留原始字符串避免命令/变量展开

这个问题在写Bash脚本时太常见了——默认情况下,Bash的Here文档(<<标记)会自动处理变量展开、命令替换甚至算术运算,所以你才会看到$(ping 8.8.8.8)被实际执行并把输出写入了文件。要保留原始字符串,有两种简单可靠的办法:

方法1:给结束标记包裹单引号

这是最省心的方式,直接把Here文档的结束标记用单引号括起来,整个文档内的内容都会被当作纯文本,不会触发任何展开操作。修改后的脚本如下:

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

执行后,foo.bar里的内容就是原始的t=$(ping 8.8.8.8),完全不会执行ping命令。

方法2:转义单个特殊字符

如果只是需要保留部分特殊内容,不想全局禁用展开,也可以单独转义那些会被解析的特殊符号——比如给$加上反斜杠\:

#!/bin/bash
cat >./foo.bar <<EOL
t=\$(ping 8.8.8.8)
EOL

这种方式适合文档里既有需要展开的变量,又有需要保留的原始命令/特殊字符的场景,灵活性更高。

你可以根据自己的需求选择其中一种方法,两种都能实现你想要的“写入原始字符串”的效果。

内容的提问来源于stack exchange,提问作者Salami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:38:35