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вообще не регистрирует the.

Может быть я неправильно настроил cygwin?

решение1

Ну...я чувствую себя глупым. Но я отвечу на этот вопрос для тех, у кого такая же проблема.

Так как я разрабатываю на компьютере с Windows, то он использует окончания строк CRLF. Я использую Sublime Text и никогда не думаю о окончаниях строк, потому что я всегда разрабатываю для Windows.

Но, конечно, скрипты bash должны использовать окончания строк LF, иначе происходят странные вещи. Я не могу сказать, почему он позволяет echoкомандам выполняться, а не 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

Связанный контент