存在するこの投稿、Stephenの答えは、次のコードを示しています。
cat <<-"EOF1" >> myPath/myFile.append
if ! grep -F -q -f myPath/myFile{.append,}; then
cat myPath/myFile.append >> myPath/myFile
fi
ここに文書に区切り文字がないのはなぜですか?
答え1
私がテストしたすべてのシェルはドキュメントをよく読んでおり、終了者がいなくてもドキュメントはファイルの最後で終わりました。 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
。