====== BASH - Math - Error with ((expression)) ======
**WARNING:** Be careful when using **((expression))**.
----
====== Arithmetic evaluation and errexit trap ======
count=0
things="0 1 0 0 1"
for i in $things;
do
if [ $i == "1" ]; then
(( count++ ))
fi
done
echo "Count is ${count}"
returns:
2
----
===== Check the return code =====
echo $?
returns:
0
**NOTE:** A **0** indicates success.
A **1** indicates failure.
**NOTE:** This looks fine; but there is a small gotcha:
The **((expression))** is evaluated according to the Arithmetic Evaluation rules.
* If the value of the expression is non-zero, the return status is 0; otherwise the return status is 1.
* This is exactly equivalent to **let "expression"**.
But if you run this script with **-e** or enable errexit:
bash -e test.sh
then count++ is going to return 0 (post-increment) and the script will stop.
Checking the result:
echo $?
returns:
1
This time a failure.
A definite trap to watch out for! Do not use **((expression))** here.