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 进行开发。

但是,当然,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

相关内容