exprexprexprexpr
Section: Tcl Built-In Commands (3tcl)
Updated: 8.3
Index Return to Main Contents
NAMENAMENAMENAME
expr - 求一个表达式的值
总览总览总览总览 SYNOPSISSYNOPSISSYNOPSISSYNOPSIS
exprexprexprexpr arg ?arg arg ...?
描述描述描述描述 DESCRIPTIONDESCRIPTIONDESCRIPTIONDESCRIPTION
连接(concatenate)所有 arg (在它们中间添加分隔符空格),把结果作为一个Tcl 表示式来求值(evaluate)
并返回结果。在 Tcl 表达式中允许的操作符式在 C 表达式中允许的操作符的一个子集,并且它们与相应的
C 操作符有相同意义和优先级。表达式几乎总是产生一个数值结果(整数或浮点数的值)。例如,表达式
expr 8.2 + 6expr 8.2 + 6expr 8.2 + 6expr 8.2 + 6
求值出 14.2. Tcl 表达式与 C 表达式在操作数指定的方式上有区别。还有,Tcl 表达式支持非数值操作符
和字符串比较。
操作操作操作操作数数数数 OPERANDSOPERANDSOPERANDSOPERANDS
一个 Tcl 表达式由操作符、操作数和括号的组合构成。在操作符、操作数和括号之间可使用白空格;它被
表达式的指令所忽略。指定整数值可以使用十进制(通常的情况)、八进制(如果操作数的第一个字符是 0000)、
或十六进制(如果操作数的前两个字符是 0x0x0x0x)。如果一个操作数没有上述的整数格式,则如果可能的话把它
作为浮点数对待。指定浮点数可以使用任何遵从 ANSI 的 C 编译器可接受方式(除了在多数安装
(installation)中不允许 ffff、FFFF、llll 和 LLLL 后缀)。例如,下列的数都是有效的浮点数: 2.1、3.、6e4、
7.91e+16。如果没有可能的数值解释,则一个操作数被作为字符串来保留(并且对它只提供一组有限的操作
符)。
可以用下列方式指定操作数:
[1] 为一个数值值,要么是整数要么是浮点数。
[2] 作为一个 Tcl 变量,使用标准的 $$$$ 记号。变量的值将被用作操作数。
[3] 作为用双引号包围起来的一个字符串。表达式分析器将在引号之间的信息上完成反斜杠、变量和命令
替换,并把结果值用作操作数。
[4] 作为用花括号包围起来的一个字符串。在左花括号和相匹配的右花括号之间的字符将被用作操作数而
不做任何替换。
[5] 作为一个用方括号包围起来的 Tcl 命令。命令将被执行并且它的结果将被用作操作数。
[6] 作为一个数学函数,它的参数可以是操作数的任何上述形式,比如 sin($x)sin($x)sin($x)sin($x)。参见下面的已定义的函
数的一个列表。
在上述替换发生的地方(例如在被引用起来的字符串当中),他们由表达式的指令来完成。但是,在调用表达
式处理器之前命令分析器可能已经完成了一个额外的替换层。如下面讨论的那样,通常最好把表达式包围在
花括号中来防止命令分析器在这些内容上进行替换。
举一些简单的表达式的例子,假设变量aaaa 的值是 3 并且变量 bbbb 的值是 6。则下面的每行左边的命令将生
成右边的值。
expr 3.1 + $a6.1expr 3.1 + $a6.1expr 3.1 + $a6.1expr 3.1 + $a6.1
expr 2 + "$a.$b"5.6expr 2 + "$a.$b"5.6expr 2 + "$a.$b"5.6expr 2 + "$a.$b"5.6
expr 4*[llength "6 2"]8expr 4*[llength "6 2"]8expr 4*[llength "6 2"]8expr 4*[llength "6 2"]8
expr {{word one} < "word $a"}0expr {{word one} < "word $a"}0expr {{word one} < "word $a"}0expr {{word one} < "word $a"}0
操作符操作符操作符操作符 OPERATORSOPERATORSOPERATORSOPERATORS
下面列出了有效的操作符,用优先级的降序分组:
++++ ~~~~