在linux环境中,EOF是End Of File的缩写,字面意思是文件结束。它通常用来标志一段输入的终止。在shell脚本里,EOF多数时候是作为一个临时的分界符,用来告诉命令从下一行开始读取多行内容,直到再次遇到同样的EOF才停止。

EOF在shell中的基本用法
最常见的用法是配合cat命令向文件写入多行内容。下面的例子使用EOF作为分界符,把多行文本写入test.conf:
#!/bin/bash cat > test.conf << EOF server_name=my_server listen_port=8080 log_path=/var/log/app.log EOF echo "写入完成"
上面代码中,<<是重定向符号,EOF是用户指定的分界符。shell会一直读取后面内容,直到单独一行的EOF出现。
自定义EOF名称
EOF并不是关键字,你可以换成任意字符,比如DATA:
cat > demo.txt << DATA hello world this is a test DATA
带引号的EOF有什么不同
如果分界符加上引号,如<< 'EOF',则内部内容不会做变量展开:
name="tom" cat > a.txt << 'EOF' user=$name EOF
此时文件中会原样保留$name,而不会替换成tom。
常见使用场景
- 批量生成配置文件
- 在脚本中执行交互式命令的多行输入
- 数据库初始化时写入sql语句
注意事项
使用EOF时要注意结尾的分界符必须顶格写,前后不能有多余空格,否则shell会认为输入还没结束。另外如果内容里本身包含EOF字样,应换用其他分界符避免冲突。
简单说,linux的eof就是一种输入结束的标记习惯,用好了能让脚本写起来更轻松。