嗨,我正在做一些事情,我需要创建一个 if 语句,它将在 '&&' 和 '||' 中采用多个变量 组合 。现在我正在尝试这个简单的任务,但我收到错误“找不到命令”。我想先 && 两个比 || 它带有我在代码中设置的标志。以下是我正在尝试的代码
if [[$pcount -eq 0 ] && [$ucount -eq 0]] || [test $flag -eq 1]
then
do my stuff
else
exit 1
fi
先感谢您。
嗨,我正在做一些事情,我需要创建一个 if 语句,它将在 '&&' 和 '||' 中采用多个变量 组合 。现在我正在尝试这个简单的任务,但我收到错误“找不到命令”。我想先 && 两个比 || 它带有我在代码中设置的标志。以下是我正在尝试的代码
if [[$pcount -eq 0 ] && [$ucount -eq 0]] || [test $flag -eq 1]
then
do my stuff
else
exit 1
fi
先感谢您。
您不能嵌套[ ... ]
,因为[
它是一个 shell 命令,而不是一个单独的语法结构。在 Bash 中,您可以使用[[ ... ]]
支持嵌套的语法结构,在可移植中,sh
您可以使用( ... )
括号作为优先级:
if ([ $pcount -eq 0 ] && [ $ucount -eq 0 ]) || [ $flag -eq 1 ]
补充说明:
[test condition]
没有意义,因为[
运算符已经是test
. 写要么[ condition ]
要么test condition
。
[
和测试前留一个空格,否则sh
无法识别[
为命令名。[
是一个和其他命令一样的命令,并且与特殊的解析规则无关。
在 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
但是,我会推荐第一种方法。