Bash 带括号的 for 循环在 linux 而不是 Git Bash

Bash for loop with Parenthesis working in linux and not in Git Bash

我有简单的 bash 循环,它在 linux 中工作正常,而不是在本地 Git Bash 中,它基于 windows[= 中的 cygwin 30=] 我有这个 for 循环:

  #!/bin/bash

    for (i=2; i<4; ++i); do
        echo "dddd"
    done

in Git Bash 它给了我这个错误:

./test.sh: line 5: syntax error near unexpected token `newline'
./test.sh: line 5: ` done

linux 版本 bash

Amazon Linux 版本 20xx.0x 可用。 [user1 ~]$ bash --version GNU bash,版本 4.2.46(2)-release (x86_64-redhat-linux-gnu) 版权所有 (C) 2011 Free Software Foundation, Inc. 许可 GPLv3+:GNU GPL 版本 3 或更高版本

Git bash 版本

GNU bash,版本 4.3.46(2)-release (i686-pc-msys) 版权所有 (C) 2013 Free Software Foundation, Inc. 许可 GPLv3+:GNU GPL 版本 3 或更高版本 http://gnu.org/licenses/gpl.html

这是免费软件;您可以自由更改和重新分发它。 在法律允许的范围内,不提供任何保证。

需要两个括号:

#!/bin/bash

for ((i=2; i<4; ++i)); do
    echo "dddd"
done

将行结尾从 CRLF 更改为 LF。有很多方法可以做到这一点。您最喜欢的编辑器可能有一个选项可以更改行尾,也可以在保存文件时保留现有的行尾。

最简单的方法是使用 dos2unix。要就地转换,请使用 dos2unix bashtest.sh.