**Evaluation and Substitutions 3: Grouping arguments with [[]]** !!!!!! '''[Tcl Tutorial Lesson 4%|%Previous lesson%|%]''' | '''[Tcl Tutorial Index%|%Index%|%]''' | '''[Tcl Tutorial Lesson 6%|%Next lesson%|%]''' !!!!!! You obtain the results of a command by placing the command in square brackets ([[]]). This is the functional equivalent of the back single quote (`) in sh programming, or using the return value of a function in C. As the Tcl interpreter reads in a line it replaces all the $variables with their values. If a portion of the string is grouped with square brackets, then the string within the square brackets is evaluated as a command by the interpreter, and the result of the command replaces the square bracketed string. ====== puts [readsensor [selectsensor]] ====== * The parser scans the entire command, and sees that there is a command substitution to perform: `readsensor [selectsensor]` , which is sent to the interpreter for evaluation. * The parser once again finds a command to be evaluated and substituted, `selectsensor` * The fictitious `selectsensor` command is evaluated, and it presumably returns a sensor to read. * At this point, `readsensor` has a sensor to read, and the `readsensor` command is evaluated. * Finally, the value of `readsensor` is passed on back to the `puts` command, which prints the output to the screen. The exceptions to this rule are as follows: * A square bracket that is escaped with a \ is considered as a literal square bracket. * A square bracket within braces is not modified during the substitution phase. ---- ***Example*** ======tcl set x abc puts "A simple substitution: $x\n" set y [set x "def"] puts "Remember that set returns the new value of the variable:" puts " X: $x Y: $y\n" set z {[set x "String within quotes within braces"]} puts "Note curly braces: $z\n" set a "[set x {String within braces within quotes}]" puts "See how the set is executed: $a" puts "\$x is: $x\n" set b "\[set y {This is a string within braces within quotes}]" # Note the \ escapes the bracket, and must be doubled to be a # literal character in double quotes puts "Note the \\ escapes the bracket:\n \$b is: $b" puts "\$y is: $y" ====== <> Resulting output ======none A simple substitution: abc Remember that set returns the new value of the variable: X: def Y: def Note curly braces: [set x "String within quotes within braces"] See how the set is executed: String within braces within quotes $x is: String within braces within quotes Note the \ escapes the bracket: $b is: [set y {This is a string within braces within quotes}] $y is: def ====== <> !!!!!! '''[Tcl Tutorial Lesson 4%|%Previous lesson%|%]''' | '''[Tcl Tutorial Index%|%Index%|%]''' | '''[Tcl Tutorial Lesson 6%|%Next lesson%|%]''' !!!!!!