Tcl:变量未从给定给foreach循环的列表扩展

问题描述 投票:0回答:2

我很好奇为什么执行foreach循环时列表中的变量不会扩展...

set DIR_FILES "./files"

# HDL Library Files lists
set file_list {
   "$DIR_FILES/aa.txt" \
   "$DIR_FILES/bb.txt" \
   "$DIR_FILES/cc.txt" \
}

foreach library $file_list {
    puts ">>> ($library)";
}

输出是这个:

>>> (./files/aa.txt)
>>> (./files/bb.txt)
>>> (./files/cc.txt)

代替此:

输出是这个:

>>> ($DIR_FILES/aa.txt)
>>> ($DIR_FILES/bb.txt)
>>> ($DIR_FILES/cc.txt)
tcl
2个回答
0
投票
set DIR_FILES "./files"

# HDL Library Files lists
set file_list " \
   $DIR_FILES/aa.txt \
   $DIR_FILES/bb.txt \
   $DIR_FILES/cc.txt \
"

foreach library $file_list {
    puts ">>> ($library)";
}

0
投票

我很好奇为什么我列表中的变量不扩展执行一个foreach循环...

这是因为使用花括号可防止发生变量替换(请参见Tcl doc):

不对括号内的单词进行变量替换。

您可能会考虑以下替代方法:

set file_list [list \
   $DIR_FILES/aa.txt \
   $DIR_FILES/bb.txt \
   $DIR_FILES/cc.txt
]

直接创建Tcl列表,而不是列表格式的字符串。

set file_list [subst -nocommands -nobackslashes {
   $DIR_FILES/aa.txt
   $DIR_FILES/bb.txt
   $DIR_FILES/cc.txt
 }]

保留反斜杠以覆盖多行格式。

© www.soinside.com 2019 - 2024. All rights reserved.