答案 0 :(得分:6)
在man bash
中,如果您搜索<<-
(键入:/<<-
和Enter
),您会发现:
If the redirection operator is <<-, then all leading tab characters are stripped from input lines and the line containing delimiter. This allows here-documents within shell scripts to be indented in a natural fashion.
例如:
$ cat << EOF
> hello
> there
> EOF
hello
there
同样的事情,但使用<<-
代替<<
$ cat <<- EOF
> hello
> there
> EOF
hello
there
“hello”行上的前导TAB字符被剥离。
正如man
页面引用的那样,
这在shell脚本中很有用,例如:
if cond; then
cat <<- EOF
hello
there
EOF
fi
习惯上在代码块中缩进行,如同if
语句中一样,以提高可读性。
如果没有<<-
运算符语法,我们将被迫编写上面的代码:
if cond; then
cat << EOF
hello
there
EOF
fi
阅读起来非常不愉快,而且在更复杂的现实剧本中它会变得更糟。
请记住,@glenn-jackman指出:
请注意,只删除标签字符,而不是任意空格。请注意,文本编辑器不会将制表符转换为空格。