为什么错误'if [$#> 0];然后'?

时间:2011-03-07 12:10:18

标签: bash ubuntu sh

为什么它仍然在第三个命令中产生输出?

$cat sh.sh
#!/bin/sh
echo $#
if [ $# > 0 ] ; then
    base=`basename $1 .c`
    echo $base
fi
$ sh sh.sh a.c
1
a
$ sh sh.sh
0
.c

我使用这个文件:/usr/share/doc/opencv-doc/examples/c/build_all.sh来构建opencv软件包的c示例,但失败并出现类似的错误。

3 个答案:

答案 0 :(得分:7)

您需要使用-gt代替>

如果您使用double parenthesis construct,则可以使用>

答案 1 :(得分:2)

请记住,[ 命令。确切地说是/usr/bin/[。它链接到命令/usr/bin/test

因此,[ $# > 0test $# > 0相同,即将test $#的输出重定向到0文件。

如果您正在使用 bash ...现在这完全是另一个故事: - )

答案 2 :(得分:1)

您应该在条件中使用-gt(大于),而不是>。请查看man test以获取更多信息。

if [ $# -gt 0 ] ; then
    base=`basename $1 .c`
    echo $base
fi