почему не так с 'if [$ #> 0]; затем'? - PullRequest
2 голосов
/ 07 марта 2011

почему он все еще производит вывод в третьей команде?

$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 для построения примеров c для пакетов opencv, но не удалось с похожими ошибками.

Ответы [ 3 ]

7 голосов
/ 07 марта 2011

Вам необходимо использовать -gt вместо >.

Вы можете использовать >, если используете конструкцию с двойными скобками .

2 голосов
/ 07 марта 2011

Помните, что [ - это команда./usr/bin/[, если быть точным.Он связан с командой /usr/bin/test

Таким образом, [ $# > 0 идентичен test $# > 0, то есть перенаправляет вывод test $# в файл 0.

Есливы используете bash ... теперь это совсем другая история: -)

1 голос
/ 07 марта 2011

Вы должны использовать -gt (Больше чем) в вашем состоянии, а не >. Посмотрите на man test для получения дополнительной информации.

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