Linux Bash Heredoc 使用示例
前言#
编写shell脚本时,您可能需要将多行文本或代码块传递给交互式命令,例如tee,cat或sftp。在Bash和其他类似Zsh的shell中,Here document(Heredoc)是一种重定向,允许您将多行输入传递给命令。
“Here Document” 目前没有统一的翻译,你可以将它理解为“嵌入文档”、“内嵌文档”、“立即文档”。
语法#
command <<END
document
END
第一行以可选命令开头,后跟特殊重定向运算符
<<
和分隔标识符
。
分割标识符
- 您可以使用任何字符串作为分隔标识符,最常用的是EOF或END。
说明
- here-document块可以包含字符串,变量,命令和任何其他类型的输入。
- 如果分隔标识符未加引号,分隔符中间的内容可以使用所有变量,命令和特殊字符
- 将减号(-) 添加到重定向运算符
<<
后面会忽略指标符,仅限制表符。 - 最后一行以分隔标识符结束。末尾分隔符前是不允许有空格的,且分隔符单独占用一行
- 正文中也可以出现分隔标识符,只要它不是独立的一行,并且不顶格写,就没问题。
案例#
新建一个自定义文件#
> cat ./mysql.conf << EOF
package public
const (
MysqlUserName = "test"
MysqlPassword = "test123456"
MysqlAddress = "127.0.0.1:3306"
MysqlDbName = "test"
)
EOF
上面案例创建了一个 mysql.conf 文件。并且在文件中写入了这些内容:
package public
const (
MysqlUserName = "test"
MysqlPassword = "test123456"
MysqlAddress = "127.0.0.1:3306"
MysqlDbName = "test"
)
<<- 忽略指标符#
> cat <<- EOF
package public
const (
MysqlUserName = "test"
MysqlPassword = "test123456"
MysqlAddress = "127.0.0.1:3306"
MysqlDbName = "test"
)
EOF
上面案例会在控制台打印这些内容:
package public
const (
MysqlUserName = "test"
MysqlPassword = "test123456"
MysqlAddress = "127.0.0.1:3306"
MysqlDbName = "test"
)
我们可以看到代码没有锁进了
"EOF" 忽略命令替换#
> cat << "EOF"
echo $PWD
EOF
上面案例会在控制台打印这些内容:
echo $PWD
我们可以看到$PWD 没有被解析成具体路径
后记#
作者:水车
出处:https://www.cnblogs.com/shuiche/p/14810050.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
推荐一个激活软件下载站:mac.shuiche.cc
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2018-05-25 把tomcat服务器配置为windows服务的方法
2017-05-25 Java获取当前时间的年月日方法