为什么它仍然在第三个命令中产生输出?
$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示例,但失败并出现类似的错误。
答案 0 :(得分:7)
您需要使用-gt
代替>
。
如果您使用double parenthesis construct,则可以使用>
。
答案 1 :(得分:2)
请记住,[
是命令。确切地说是/usr/bin/[
。它链接到命令/usr/bin/test
因此,[ $# > 0
与test $# > 0
相同,即将test $#
的输出重定向到0
文件。
如果您正在使用 bash
...现在这完全是另一个故事: - )
答案 2 :(得分:1)
您应该在条件中使用-gt
(大于),而不是>
。请查看man test
以获取更多信息。
if [ $# -gt 0 ] ; then
base=`basename $1 .c`
echo $base
fi