Search code examples
bashshellunix

Subtract two variables in Bash


I have the script below to subtract the counts of files between two directories but the COUNT= expression does not work. What is the correct syntax?

#!/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

Solution

  • You just need a little extra whitespace around the minus sign, and backticks:

    COUNT=`expr $FIRSTV - $SECONDV`
    

    Be aware of the exit status:

    The exit status is 0 if EXPRESSION is neither null nor 0, 1 if EXPRESSION is null or 0.

    Keep this in mind when using the expression in a bash script in combination with set -e which will exit immediately if a command exits with a non-zero status.