我有下面的脚本减去两个目录之间的文件计数,但COUNT=表达式不起作用。正确的语法是什么?
#!/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=表达式不起作用。正确的语法是什么?
#!/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
当前回答
除了建议的3种方法,你可以尝试let,它对变量进行如下算术运算:
让数= FIRSTV - SECONDV美元
or
允许数= FIRSTV-SECONDV
其他回答
对于简单的整数运算,也可以使用内置的let命令。
ONE=1
TWO=2
let "THREE = $ONE + $TWO"
echo $THREE
3
更多关于let的信息,请看这里。
这是我在Bash中做数学的方法:
count=$(echo "$FIRSTV - $SECONDV"|bc)
echo $count
空格很重要,expr期望它的操作数和操作符作为单独的参数。您还必须捕获输出。是这样的:
COUNT=$(expr $FIRSTV - $SECONDV)
但更常见的是使用内置算术展开:
COUNT=$((FIRSTV - SECONDV))
Diff实数
diff_real () {
echo "df=($1 - $2); if (df < 0) { df=df* -1}; print df" | bc -l;
}
使用
var_a=10
var_b=4
output=$(diff_real $var_a $var_b)
# 6
#########
var_a=4
var_b=10
output=$(diff_real $var_a $var_b)
# 6
除了建议的3种方法,你可以尝试let,它对变量进行如下算术运算:
让数= FIRSTV - SECONDV美元
or
允许数= FIRSTV-SECONDV