
私のシェルスクリプトには次のコードスニペットがありますが、エラーがあり、いくつかの調査にもかかわらず原因を特定できないようです。次のコードを実行すると、スクリプトはメッセージで終了します。
./my_script.sh: line 53: syntax error at line 61: `<<' unmatched
私はこれを使用し、set -x
エラーが発生するまですべてが大丈夫であることがわかります(とにかく変数のみを設定しました)。何らかの理由で前の空白(表示されていない文字ではなく空白)を削除するだけでeot
機能します。私のXMLは少し間違ってソートされているように見えますが、うまく動作します。説明できないこのようなことが嫌いで、XMLもきれいに見えることを望むので、なぜこのようなことが起こるのか知っている人はいますか?
スクリプトの関連部分は次のとおりです。
# ... various environment variables set here ...
clean_files() # line 53
{
# Clear up the intermediate files
mv $datafile $ARCHIVE_DIR/$(basename $datafile).$$
}
xmlfile_header()
{ # line 60
cat <<- eot
<?xml version="1.0" encoding="UTF-8" ?>
<ppllist>
eot
}
# ... more stuff ...
答え1
<<- word
here-doc フォームには次のものが必要です。タブのみ以前に表示されることがありますword
。スペースは許可されず、タブでなければなりません。
引用:http://www2.research.att.com/sw/download/man/man1/ksh.html#Input/Output