为什么 'if [ $# > 是错误的0];然后'?
为什么第三个命令仍然产生输出?
$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 示例,但因类似错误而失败。
why does it still produce output in the third command?
$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
I use this file:/usr/share/doc/opencv-doc/examples/c/build_all.sh to build the c examples for opencv packages,but failed with similar errors.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您需要使用
-gt
代替>
。如果您使用双括号构造>一个>。
You need to use
-gt
in place of>
.You can use
>
if you are using double parenthesis construct.您应该在您的条件中使用
-gt
(大于),而不是>
。请参阅man test
了解更多信息。You should use
-gt
(Greater than) in your condition, not>
. Look atman test
for more information.请记住,
[
是命令。确切地说,/usr/bin/[
。它链接到命令/usr/bin/test
因此,
[ $# > 0
与test $# > 相同0
,即将test $#
的输出重定向到0
文件。如果您使用
bash
...现在完全是一个不同的故事了:-)Remember that
[
is a command./usr/bin/[
, to be exact. It is linked to the command/usr/bin/test
So,
[ $# > 0
is identical totest $# > 0
, i.e., redirecttest $#
's output to the0
file.If you're using
bash
... now that's a different story altogether :-)