脚本中嵌入多行文本输入(EOF)
在 Shell 脚本中,EOF(End Of File)通常与 Here Document(简称 heredoc)语法结合使用,用于在脚本中嵌入多行文本输入。其核心作用是标记多行文本的起始和结束位置,常用于生成文件、向命令传递多行数据或简化复杂输入操作。
基本用法
- 直接生成文件
通过 cat 命令快速创建文件(无需逐行 echo):
cat > output.txt << EOF
第一行内容
第二行内容:$(date) # 支持命令替换
变量示例:$HOME # 支持变量替换
EOF
生成的 output.txt 内容:
第一行内容
第二行内容:Tue Jul 25 12:00:00 CST 2023
变量示例:/home/user
2. 向交互式命令传递输入
自动回答交互式命令的问题(如 mysql、ftp):
mysql -u root -p << EOF
SHOW DATABASES;
CREATE DATABASE test_db;
EXIT;
EOF
3. 嵌入多行字符串到脚本变量
将多行文本赋值给变量:
read -r -d '' message << EOF
这是一个
多行文本
变量值示例
EOF
echo "$message"
关键细节与扩展用法
- 禁用变量/命令替换
在结束标记前加单引号(<< 'EOF'),所有内容按原样处理:
cat << 'EOF'
当前路径:$PWD # 不会替换为实际路径
时间:$(date) # 不会执行命令
EOF
输出:
当前路径:$PWD
时间:$(date)
2. 缩进文本内容
使用 <<- 忽略行首的制表符(Tab),允许缩进:
cat <<- EOF
第一行(Tab缩进)
第二行(Tab缩进)
EOF
输出:
第一行(Tab缩进)
第二行(Tab缩进)
注意:只能忽略 Tab,空格缩进会报错。
3. 嵌套使用 EOF
需转义内部结束标记(如 \EOF):
cat << EOF
外层内容
cat << \EOF # 内层结束标记被转义
内层内容
EOF
EOF
输出:
外层内容
cat << EOF
内层内容
EOF

浙公网安备 33010602011771号