Cygwin bash语法错误 - 但脚本在Ubuntu中运行得非常好

Mic*_*Mao 5 bash shell cygwin

#!/bin/bash
if test "$#" == "4"; then echo "$*"; else echo "args-error" >&2; fi;
Run Code Online (Sandbox Code Playgroud)

当我尝试在Ubuntu和Cygwin上运行它时,这个小代码片段让我很烦恼.

Ubuntu运行bash版本4.0+而Cygwin运行3.2.49; 但我认为版本冲突不应该是这个的原因,这个代码在fedora 10下运行良好,Fedora 10也使用bash版本3 +

所以基本上我想知道是否有一种方法来编写我的脚本一劳永逸,所以以后不会有这个可怕的问题.

提前谢谢了.

编辑:我现在没有手工制作Cygwin,但是从我的记忆中,它一直在说像无法解决未定义的令牌"fi"之类的东西.

编辑:嗯,原始表单是这样的,只是从服务器找到:

#!/bin/bash
if ["$#" == "4"];
    then echo "$*";
    else echo "args-error" >&2;
fi;
Run Code Online (Sandbox Code Playgroud)

控制台抱怨:

$ ./test.sh 1 2 3
./test.sh: line 2: [3: command not found
args-error
Run Code Online (Sandbox Code Playgroud)

我也想知道stderr怎么会出现问题 - 命令未找到 - 但仍然可以打印出答案?

mob*_*mob 7

你需要[和周围的空白].

#!/bin/bash
if [ "$#" == "4" ];
    then echo "$*";
    else echo "args-error" >&2;
fi;
Run Code Online (Sandbox Code Playgroud)