bash算术求值和errexit陷阱

Posted gcczhongduan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash算术求值和errexit陷阱相关的知识,希望对你有一定的参考价值。

原文:https://www.technovelty.org//linux/bash-arithmetic-evaluation-and-errexit-trap.html

在 "traps for new players" 一章:

count=0
things="0 1 0 0 1"

for i in $things;
do
   if [ $i == "1" ]; then
       (( count++ ))
   fi
done

echo "Count is ${count}"

看上去非常正常?

我可能已经这么写好多次了。

但这是一个意想不到的错误:

((expression))
表达式按 ARITHMETIC EVALUATION 描写叙述的规则求值. 假设表达式的值非0。返回值为0; 否则返回值是1. 这个和let "expression"是同样的.

当你使用 -e或使能errexit运行该脚本时 -- 或许是因为脚本过大而变的不可信 -- count++ 将返回 0 (post-increment) 然后脚本就退出了. 这个陷阱须要注意!

以上是关于bash算术求值和errexit陷阱的主要内容,如果未能解决你的问题,请参考以下文章

C语言编一个实现简单的算术表达式求值的代码。

编写高质量代码改善C#程序的157个建议——建议28:理解延迟求值和主动求值之间的区别

表达式与运算符

C++:算术表达式求值

随堂练习 shell脚本

栈的应用—算术表达式求值