我是 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