Shell-shell中的 Here Document 语法
在 Shell(如 Bash)脚本中,<<-EOT .... EOT 是一种 Here Document(这里是文档)的语法形式,常用于多行字符串输入。
一、基本概念
Here Document 语法:
1  |  | 
Shell 会把 <<标记 到 标记 之间的内容当作标准输入传给前面的命令。
二、<<-EOT 的含义
1. <<-EOT 是 Here Document 的一种变体:
<<:表示开始一个 Here Document。-:可选符号,表示在分界符前允许使用 Tab 缩进(仅 Tab,空格不行),以便代码更美观。EOT:是结束标记(End Of Text),你可以换成别的名字,比如EOF、END、MYTEXT等等。约定俗成常用EOF或EOT。
三、示例说明
示例 1:基本用法
1  |  | 
输出:
1  |  | 
示例 2:带缩进的 Here Document(使用 -)
1  |  | 
这个写法是合法的,因为 EOT 前用了 Tab 缩进。输出为:
1  |  | 
⚠️ 注意:如果
EOT前面用的是空格而不是 Tab,则会报错:warning: here-document at line ... delimited by end-of-file (wanted ‘EOT’)。
四、应用场景
传递多行文本给命令(如
cat,mysql,psql,ssh等):1
2
3
4
5mysql -u root -p <<EOF
CREATE DATABASE test;
USE test;
CREATE TABLE users (id INT, name VARCHAR(50));
EOF赋值多行字符串给变量
1
2
3
4
5
6message=$(cat <<'EOF'
Hello,
This is a multi-line string.
EOF
)
echo "$message"保留变量替换或执行命令
1
2
3
4
5name="Alice"
cat <<EOF
Hello $name
Today is $(date)
EOF禁止变量替换(使用单引号包裹标记)
1
2
3
4cat <<'EOF'
Hello $name
Today is $(date)
EOF输出时不会展开
$name和$(date)。
五、总结
| 语法 | 含义 | 
|---|---|
<<EOT |  标准 Here Document,内容中可以包含变量替换 | 
<<'EOT' |  禁止变量替换(保留原样) | 
<<"EOT" |  支持变量替换(默认行为) | 
<<-EOT |  允许结束标记前有 Tab 缩进 | 
<<- 'EOT' |  允许缩进 + 禁止变量替换 | 
Shell-shell中的 Here Document 语法
 https://dnacore.github.io/post/75d153ce-8611-470f-b7ce-851292a250e2.html