Like most languages, Tcl supports an if command. The syntax is:
if
expr1
?then?
body1
elseif
expr2
?then?
body2
elseif
...?else?
?bodyN?
The words
then
and else
are optional, although generally then
is left out and else
is used.
The test expression following
if
should return a value that can be interpreted as representing "true" or "false":False | True | |
---|---|---|
a numeric value | 0 | all others |
yes/no | no | yes |
true/false | false | true |
If the test expression returns a string "yes"/"no" or "true"/"false", the case of the return is not checked. True/FALSE or YeS/nO are legitimate returns.
If the test expression evaluates to True, then
body1
will be executed.
If the test expression evaluates to False, then the word after
body1
will be examined. If the next word is elseif
, then the next test expression will be tested as a condition. If the next word is else
then the final body
will be evaluated as a command.
The test expression following the word
if
is evaluated in the same manner as in the expr
command.
The test expression following
if
may be enclosed within quotes, or braces. If it is enclosed within braces, it will be evaluated within the if
command, and if enclosed within quotes it will be evaluated during the substitution phase, and then another round of substitutions will be done within the if
command.
Note: This extra round can cause unexpected trouble - avoid it.
Example
set x 1f {$x == 2} {puts "$x is 2"} else {puts "$x is not 2"}i if {$x != 1} { puts "$x is != 1" } else {# Be careful, thiputs "$x is 1" } if $x==1 {puts "GOT 1"} #s is just an example # Usually you should avoid such constructs,set y x if "$$y != 1" { puts "$$y is != 1" } else { put# it is less than clear what is going on and it can be dangerous #s "$$y is 1" } # # A dangerous example: due to the extra round of substitution, # the script stops # set y {[exit]}if "$$y != 1" { puts "$$y is != 1" } else { puts "$$y is 1"}
No comments:
Post a Comment