在Bash中减去两个variables

我有下面的脚本减去两个目录之间的文件计数,但COUNT=expression式不起作用。 什么是正确的语法?

 #!/usr/bin/env bash FIRSTV=`ls -1 | wc -l` cd .. SECONDV=`ls -1 | wc -l` COUNT=expr $FIRSTV-$SECONDV ## -> gives 'command not found' error echo $COUNT 

你只需要在减号周围留出一些额外的空格,并且反引号:

 COUNT=`expr $FIRSTV - $SECONDV` 

试试这个Bash语法,而不是尝试使用外部程序expr

 count=$((FIRSTV-SECONDV)) 

顺便说一句,使用expr的正确语法是:

 count=$(expr $FIRSTV - $SECONDV) 

但请记住,使用expr将比上面提供的内部Bash语法慢。

您可以使用:

 ((count = FIRSTV - SECONDV)) 

以避免调用一个单独的进程,根据以下成绩单:

 pax:~$ FIRSTV=7 pax:~$ SECONDV=2 pax:~$ ((count = FIRSTV - SECONDV)) pax:~$ echo $count 5 

空白是重要的, expr期望它的操作数和操作符是单独的参数。 您还必须捕获输出。 喜欢这个:

 COUNT=$(expr $FIRSTV - $SECONDV) 

但是使用内build算术扩展更常见:

 COUNT=$((FIRSTV - SECONDV)) 

这是我总是在Bash做math的:

 count=$(echo "$FIRSTV - $SECONDV"|bc) echo $count 

除了build议的3种方法之外,您可以尝试let对variables执行算术运算,如下所示:

let COUNT=$FIRSTV-$SECONDV

要么

let COUNT=FIRSTV-SECONDV

对于简单的整数运算,你也可以使用内build的let命令。

  ONE=1 TWO=2 let "THREE = $ONE + $TWO" echo $THREE 3 

有关更多信息,请看这里 。