这是一个我知道的小问题。我们正在用Ruby编写Bash荧光笔,需要实现 heredoc 突出显示。我见过的两种格式是这样的。请注意EOF
cat <<EOF
Hello
World
EOF
cat << EOF
Hello
World
EOF
问题是,在第一个EOF
之前使用空格是不正确/非官方/不良做法吗?
答案 0 :(得分:5)
POSIX Shell Command Language specification显式指定文件描述符号(如果有的话)“紧接在重定向运算符之前”;但它没有类似的要求,重定向操作符紧接在单词之前。令牌识别规则意味着在重定向操作符和单词之间将丢弃任何空格,因此我认为任何正确的实现都应该接受这样的空格。 (不可否认,如果不是相同的令牌识别规则对文件描述符号和重定向操作符之间的空格有同样的意义,这将更令人放心。)
尽管 Bash参考手册的heredocs示例在单词之前没有包含空格,但它确实为其他示例提供了 do 包含空格的重定向这个词,POSIX规范或 Bash参考手册中的任何内容都没有任何理由认为heredocs的单词在这方面与任何其他类型的重定向中的单词不同,所以我不喜欢我认为它应该被认为是不好的做法。我认为你的语法高亮显示器应该支持两者,除非项目的目标之一是为这些事情强制执行某种标准样式。