cygwin bash - if文が機能しない

cygwin bash - if文が機能しない

私はbashスクリプトの初心者で、Windowsで学習しようとしているので、cygwinをダウンロードしました。Windows 10、cygwin v2.5.1を使用しています。

bash パッケージがインストールされていることを確認したので (インストールしました)、いくつかのチュートリアルを実行してみましたが、if...fiステートメントに到達したところで動作しなくなりました。これが私のコードです:

#!/usr/bin/env bash
#
echo 'Hello'
#
if [ 1 -eq 1 ]
then
  echo 'Success'
fi
echo 'Hello Again'

出力は

>./test.sh
Hello
./test.sh: line 10: syntax error: unexpected end of file

if何が間違っているのか、まったくわかりません。if 文をコピー/貼り付けし、さまざまな種類の式を試してみましたが、まったく認識されないようです。

cygwin の設定が間違っていたのでしょうか?

答え1

そうですね...私は愚かだと感じています。しかし、同じ問題を抱えている他の人のためにこの質問に答えます。

私は Windows コンピューターで開発しているので、CRLF 行末を使用しています。私は Sublime Text を使用しており、常に Windows 向けに開発しているため、行末について考えたことはありません。

echoしかし、もちろん、bash スクリプトでは LF 行末を使用する必要があります。そうしないと、奇妙なことが起こります。コマンドが実行できて が実行できない理由はわかりませんif...fiが、行末を LF に切り替えると、すべてが期待どおりに機能しました。

答え2

私の場合はうまくいきましたが、行末をDOSスタイル(CR/LF行末)に変更すると、

$ u2d ./prova.sh
unix2dos: converting file ./prova.sh to DOS format...

$ ./prova.sh
Hello
./prova.sh: line 10: syntax error: unexpected end of file

スクリプトをUNIXスタイル(行末はLF)に変換します。

$ d2u ./prova.sh
dos2unix: converting file ./prova.sh to Unix format...
$ ./prova.sh
Hello
Success
Hello Again

関連情報