expr oneormorearguments 

The other outcome of an expression is string
White space may be used between operands, operators and parentheses; it is ignored by the expression processor.


Examples:
expr 12 // Integer // expr receives: 12 // it is a numeric string expr 12.3 // Floating point // expr receives: 12.3 // it is a numeric string expr a // Error: // expr receives: a // it is a nonnumeric string  needs quotes !! expr {a} // Error: // expr (still) receives: a // it is a nonnumeric string  needs quotes !! expr {"a"} // String: // expr receives: "a" // it is a nonnumeric string  it has quotes !! // expr performs a Tcl eveluation on "a"... // Output: a expr {{a}} // String: // expr receives: {a} // it is a nonnumeric string  it has quotes !! // expr performs a Tcl eveluation on {a}... // Output: a 
set a 1 // a = 1 set b "abc" // b = abc ("abc" > abc after substitution) set c {"abc"} // c = "abc" ({"abc"} > "abc" after substitution) expr $a // Integer // expr receives: 1 expr $a + 1 // Integer // expr receives: 1 + 1 expr $b // Error // expr receives: abc // It's a literal string // > need quotes !) // String without quotes... expr $c // String // expr receives: "abc" // It's a literal string // > need quotes and got them !) // Result: abc 
Operator symbol  Operation  Applicability for operand types 

 +  Unary operators  Applicable only to numeric operands (not strings !) 
* / %  Multiply, divide, remainder  Applicable only to numeric operands. % only applicable to integers 
+   Binary addition and subtraction  Applicable only to numeric operands. 
< > <= >=  less than, greater than, etc  Applicable only to every type of operands. 
== !=  equal and not equal  Applicable only to every type of operands. 
eq ne  string equal and string not equal  Applicable only to string type of operands. 
&&  logical AND  Applicable only to numeric type of operands. (0 means false, nonzero means true) 
  logical OR  Applicable only to numeric type of operands. (0 means false, nonzero means true) 
expr 17 + 2 // 19 expr "17 + 2" // 19 (NOTE: don't use ".." with expr) // We will see why when we discuss "if" statement expr {17 + 2} // 19 expr 9 / 2 // 4 (quotient) expr 9 % 2 // 1 (remainder) expr 9.0 / 2 // 4.5 (floating point division) expr 9.0 % 2 // Error  Need integers ! expr "6 < 9" // 1 (true) expr 6 >= 9 // 0 (false) 
set x 4 // x = 4 
NOTE:
expr {"abc" < "def"} // 1 (true) // expr receives: "abc" < "def" expr {"abc" > "def"} // 0 (false) // expr receives: "abc" < "def" string compare "12" "3" // 1 