在这个帖子,斯蒂芬的回答显示了这段代码:
cat <<-"EOF1" >> myPath/myFile.append
if ! grep -F -q -f myPath/myFile{.append,}; then
cat myPath/myFile.append >> myPath/myFile
fi
为什么heredocument没有分隔符?
答案1
我测试的所有 shell 都可以很好地读取此处文档,即使没有终止符,此处文档也会在文件末尾结束。 Bash 会对此发出警告,但 busybox/dash/ksh 和 zsh 只是默默地处理它。
例如
$ cat heredoctest.sh
#!/bin/bash
cat -n <<EOF
foo
bar
$ bash heredoctest.sh
heredoctest.sh: line 4: warning: here-document at line 2 delimited by end-of-file (wanted `EOF')
1 foo
2 bar
但您提供的特定代码示例似乎是一个错误。正如它所写的,它只会将 if 语句附加到myPath/myFile.append
,这似乎不太有用。看起来 here-doc 内容和终止符在cat
和之间丢失了if
。