5

嗨,我正在做一些事情,我需要创建一个 if 语句,它将在 '&&' 和 '||' 中采用多个变量 组合 。现在我正在尝试这个简单的任务,但我收到错误“找不到命令”。我想先 && 两个比 || 它带有我在代码中设置的标志。以下是我正在尝试的代码

if [[$pcount -eq 0 ] && [$ucount -eq 0]] ||  [test $flag -eq 1]
then 
do my stuff 
else 
exit 1
fi

先感谢您。

4

2 回答 2

9

您不能嵌套[ ... ],因为[它是一个 shell 命令,而不是一个单独的语法结构。在 Bash 中,您可以使用[[ ... ]]支持嵌套的语法结构,在可移植中,sh您可以使用( ... )括号作为优先级:

if ([ $pcount -eq 0 ] && [ $ucount -eq 0 ]) ||  [ $flag -eq 1 ]

补充说明:

  • [test condition]没有意义,因为[运算符已经是test. 写要么[ condition ]要么test condition

  • [和测试前留一个空格,否则sh无法识别[为命令名。[是一个和其他命令一样的命令,并且与特殊的解析规则无关。

于 2012-11-14T09:06:23.573 回答
3

在 bash 中,你可以这样做:

if [[ ( $pcount == 0  &&  $ucount == 0 ) || ( $flag == 1 ) ]]
then
    echo "do stuff"
fi

或者:

if [ "$pcount" -eq 0 -a "$ucount" -eq 0 ] || [ "$flag" -eq 1 ]
then
     echo "do stuff"
fi

但是,我会推荐第一种方法。

于 2012-11-14T09:02:42.170 回答