Как получить строку в подстановке расширения Tcl

Чтобы ответить на вопрос ранее с использованием Tcl версии 8.5, я имеют:

set defs {}
array set options $::argv
set git_ver $options(-git_ver)
lappend defs {-verilog_define GIT_VERSION=${git_ver}}
foreach i $defs { puts $i }

Что я получаю от puts:

-verilog_define GIT_VERSION=${git_ver}

Но как мне получить строковое представление моей переменной git_ver?


person hancock    schedule 03.10.2014    source источник
comment
Сделать lappend defs "-verilog_define GIT_VERSION=${git_ver}" вместо этого? Это заменит переменную, когда вы добавите строку в список.   -  person Jerry    schedule 04.10.2014


Ответы (1)


Используйте двойные кавычки вместо фигурных скобок:

lappend defs "-verilog_define GIT_VERSION=${git_ver}"

В качестве альтернативы вы можете использовать команду subst, чтобы фигурные скобки действовали как двойные кавычки:

lappend defs [subst {-verilog_define GIT_VERSION=${git_ver}}]

В Tcl двойные кавычки и фигурные скобки делают то же самое — группируют слова. Единственное отличие состоит в том, что двойные кавычки выполняют замену, а фигурные скобки — нет.

person slebetman    schedule 03.10.2014
comment
Последняя альтернатива — lappend defs [list -verilog_define GIT_VERSION=${git_ver}], но я предполагаю, что git_ver содержит что-то «приятное» и свободное от метасинтаксических символов… - person Donal Fellows; 04.10.2014