如何在声明tcl列表时使用变量的值

l-g*_*-21 1 tcl

是否可以在tcl列表声明中使用变量?我有以下简单示例:

set grape_color "green"

set produce_list {\
   { PRODUCE COLOR             REGION  }\
   { APPLE   "red"             TX }\
   { GRAPE   $grape_color      CA }\
}

puts $produce_list
Run Code Online (Sandbox Code Playgroud)

代码的输出是这样的:

{ PRODUCE COLOR             REGION  } 
{ APPLE   "red"             TX }
{ GRAPE   $grape_color      CA }
Run Code Online (Sandbox Code Playgroud)

但我想要"绿色"而不是$grape_color列表.

rob*_*off 5

一种方法是使用该list命令.

set grape_color green
set produce_list [list \
    [list PRODUCE COLOR        REGION] \
    [list APPLE   red          TX] \
    [list GRAPE   $grape_color CA]]
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用该subst命令.

set grape_color green
set produce_list {
    { PRODUCE COLOR        REGION }
    { APPLE   red          TX }
    { GRAPE   $grape_color CA }
}
set produce_list [subst -nobackslashes -nocommands $produce_list]
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用第一个选项(尽管它很难看); 第二个将遇到多字替换的问题(例如,"柠檬黄"). (2认同)