在tcl中打印多个变量

时间:2014-07-03 04:08:30

标签: tcl puts

我必须在一个puts中打印多个变量,就像这样

puts "$n1_$n2_$n3_$n4"

其中n1n2n3n4是4个变量。

它不会打印并显示错误n1_ : no such variable

预期输出应该是这样的(例子)

01_abc_21_akdd

2 个答案:

答案 0 :(得分:1)

Tcl中的变量名可以是Tcl中的任何字符串,没有限制但是如果你想使用特殊字符(那些不在a-z0-9_范围内的字符,以及不同语言的字母,具体取决于平台和区域设置),您必须支持表达式名称或使用其他解决方法(如Hoodiecrow的答案)。

这意味着,如果您有一个名为abc.d的变量,并且使用$abc.d,则Tcl引擎会尝试查找变量$abc,因为.不是正常的'字符。

但如果你有一个名为abc的变量并使用$abcd$abc_d,那么引擎会开始寻找变量abcdabc_d abc

因此,您必须在变量名之间使用大括号,例如:

${n1}

使用反斜杠的原因是\不是正常的'在阅读上述内容之后,事情的运作方式应该更加明显。


有一些东西可以用变量名称来表示,它们不需要支撑,但仍然意味着什么,除了某些东西是特殊的':

  1. :::这通常用于范围界定。例如,如果您有一个名为my_var的全局变量,您也可以使用$::my_var来引用它。这里::告诉Tcl my_var是一个全局变量。请注意,如果一行中有两个以上:,则不会加起来:

    % set ::y 5
    5
    % set ::::y
    5
    % set :::y
    5
    

    ::通常用于定义变量所在的命名空间。例如,$mine::var是名称空间中名为var的名为mine的变量。

  2. ():这些用于数组。 $arr(key)是一个包含两部分的变量:数组名称arr和密钥名称key。注意:您可以拥有一个名为的数组和一个名为的键,因为......

    % set () abc
    abc
    % puts $()
    abc
    % array get ""
    {} abc
    
  3. 可能会有更多,但这些是你可以留意的基础。

答案 1 :(得分:0)

另外两种方式:

puts "${n1}_${n2}_${n3}_${n4}"

puts [format "%s_%s_%s_%s" $n1 $n2 $n3 $n4]

文档:format

(注意:Jerry的答案中提到的'Hoodiecrow'是我,我之前使用过那个昵称。)