前言

呵呵 这个命令 应该是 linux 使用者 基本上都会使用到的吧?

呵呵 我们这里主要是 看一下 这个命令是如何工作的

main 中主要是参数处理, 然后将核心业务委托给 eval

eval 主要是委托业务给 eval1 - eval7 来处理, 分别是 由优先级的从低到高

这就是一个 自己从 0 开始的 eval 的一个实现, 呵呵 很经典

我之前有一个自己的 EvalLike, 实现相对简单 02 计算字符串表达式 [类似于js eval函数]_970655147的专栏

基于 linux-4.4.0 + coreutils-8.25

调试基于命令 "expr 2 + 3"
 

main

参数处理, 然后将核心业务委托给 eval

09 expr 命令_gnu

eval 

首先是 | 的处理 

eval1 是 & 的处理 

eval2 是 <, >, <=, >=, ==, != 的处理 

eval3 是 +, - 的处理 

eval4 是 *, /, % 的处理 

eval5 是 : 的处理 

eval6 是 length, match, index, substr 的处理 

eval7 是 () 的处理 

09 expr 命令_字符串_02

我们这里的 2 + 3 的处理 

09 expr 命令_gnu_03