在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
有关更多信息,请看这里 。