"

"

我用谷歌搜索了这个主题,所有结果都在谈论<<EOF。但我看到脚本使用<<-EOF,但我无法通过谷歌搜索找到任何地方。因此, bash 脚本之间<<-EOF和内部有什么不同?<<EOF多谢。

答案1

<<-EOF将忽略你的定界文档中的前导选项卡,而<<EOF不会。因此:

cat <<EOF
    Line 1
    Line 2
EOF

将产生

    Line 1
    Line 2

尽管

cat <<-EOF
    Line 1
    Line 2
EOF

产生

Line 1
Line 2

答案2

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

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

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

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

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

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

相关内容