私は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