5

次のコードスニペットを実行すると

#!/bin/bash
if [ "foo" = "foo" ];
then
echo "true"
else
echo "false"
fi
echo "end"

私は得る

sfm_write_buffer_test.sh: line 9: syntax error: unexpected end of file

これは意味がありません。echo ステートメントは問題なく動作しますが、if ステートメントに遭遇すると、上記のエラーが発生します。

4

3 に答える 3

9

あなたはCygwinを使っていますよね?

コメントで述べたように、スクリプトをコピーして貼り付けてシステムで実行すると、機能します。出力は

true
end

しかし、行末を Unix スタイル'\n'から Windows スタイルに変更する'\r\n'と、同じエラーが発生します。

Windows スタイルの行末では、bash はthenキーワードを認識しません。という名前のコマンドが表示されthen\rます。一致thenまたはキーワード (行末にないため認識された) をfiスキャンしているため、実行を試みることはありません。if

シェル スクリプトが Unix スタイルの行末を使用していることを確認してください。

于 2011-08-29T23:33:56.410 に答える