我用谷歌搜索了这个主题,所有结果都在谈论<<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 的手册页:
但是,如果连字符 (-) 附加到 <<:
在读取 shell 输入之前(但在 word 上完成参数和命令替换之后),从 word 中删除前导制表符;
在读取 shell 输入时以及在将每一行与单词进行比较之前,先行制表符会从 shell 输入中去除;和
shell 输入被读取到与结果单词字面匹配的第一行,或者到 EOF。
因此<<-
允许缩进此处文档的内容以获得更好的可读性。