bash脚本中的“<<-EOF”和“<<EOF”有什么区别?

sgo*_*n00 1 bash here-document

我确实用谷歌搜索过这个话题,所有结果都在谈论<<EOF。但是我看到脚本使用<<-EOF,但我无法通过谷歌搜索找到任何内容。因此,bash 脚本<<-EOF<<EOFbash 脚本之间有什么不同?非常感谢。

And*_*Ray 5

<<-EOF将忽略您的 heredoc 中的前导标签,而<<EOF不会。因此:

cat <<EOF
    Line 1
    Line 2
EOF
Run Code Online (Sandbox Code Playgroud)

会产生

    Line 1
    Line 2
Run Code Online (Sandbox Code Playgroud)

尽管

cat <<-EOF
    Line 1
    Line 2
EOF
Run Code Online (Sandbox Code Playgroud)

产生

Line 1
Line 2
Run Code Online (Sandbox Code Playgroud)


sch*_*ily 5

如果您使用<<-EOF,我推荐 Bourne Shell 的手册页:

但是,如果连字符 (-) 附加到 <<:

  1. 在读取 shell 输入之前(但在 word 上完成参数和命令替换之后),从 word 中删除前导制表符;

  2. 在读取 shell 输入时以及在将每一行与单词进行比较之前,先行制表符会从 shell 输入中去除;和

  3. shell 输入被读取到与结果单词字面匹配的第一行,或者到 EOF。

因此<<-允许缩进此处文档的内容以获得更好的可读性。