#!/bin/bash
if test "$#" == "4"; then echo "$*"; else echo "args-error" >&2; fi;当我试图在Ubuntu和Cygwin上运行它时,这个小代码片段给我带来了很多麻烦。
Ubuntu运行bash版本4.0+,而Cygwin运行3.2.49;但我认为版本冲突不应该是导致这个问题的原因,这段代码在同样使用bash版本3.+的Fedora10下运行得很好
所以基本上我想知道是否有一种方法可以一次性地编写我的脚本,这样以后就不会有这个可怕的问题了。
在此之前,非常感谢您。
编辑:目前我还没有手写的Cygwin,但在我的记忆中,它一直在说像无法解析未定义的令牌"fi“之类的东西。
编辑:原来的表单是这样的,是从服务器上找到的:
#!/bin/bash
if ["$#" == "4"];
then echo "$*";
else echo "args-error" >&2;
fi;控制台抱怨:
$ ./test.sh 1 2 3
./test.sh: line 2: [3: command not found
args-error我也想知道为什么stderr说有些地方出错了-没有找到命令-但仍然可以打印出答案?
发布于 2010-03-26 07:10:38
您需要在[和]周围留出空格。
#!/bin/bash
if [ "$#" == "4" ];
then echo "$*";
else echo "args-error" >&2;
fi;发布于 2010-03-26 06:55:54
更新答案:
在[后面需要一个空格,否则["$#"的计算结果为[3,这是不存在的。试试这个:
if [ "$#" == "4" ];
then echo "$*";
else echo "args-error" >&2;
fi;这对我很管用。我猜你会得到一个类似这样的错误:
test.sh: line 2: $'\r': command not found
test.sh: line 3: $'\r': command not found这可能是因为您已经使用Windows风格的行尾编辑了文件,而Bash期望使用Unix风格的行尾。要修复该文件,请尝试运行以下命令:
dos2unix test.sh当然,您需要将文件名更改为脚本的实际文件名。
发布于 2010-03-26 07:14:03
在显示“原始表单”的编辑中,问题似乎是在[和"之间缺少一个空格
https://stackoverflow.com/questions/2520008
复制相似问题